I've looked for this and could not find it either, just :
http://www.framed.usps.com/ncsc/lookups/lookup_ctystzip.html
Part of the reason I think is some zipcodes have multiple towns (small ones) but if one adds their address, "it" should know, right? Imagine if this existed, we wouldn't have to fill out/require city/state inputs anymore and that would be wonderful. Once one enters a zipcode, if multiple cities exist it should automagically give a select list for the user to select their city. This would be so nice.
Anyway, going back to the above like, through some trickery it could be done but having an actual db with this information would be much much better. Hmmmmmmmmmm...