GeoNames is YAG (yet another geocoder), but behind the curtains lie many cool features. The most unique of which is a reverse geocoder.
Reverse geocoding is converting Latitude & Longitude to a place name. This is the other side of the mirror from traditional geocoding, which converts a place name into latitude & longitude. Why would someone want to reverse geocode you ask? With reverse geocoding you can convert your GPS tracklogs into meaningful locations easily, or allow users to click on a map and get back actual location of where they're clicking.
The GeoNames API provides an interface for getting nearby postal codes, country, or most specific: place names.
populated place 6360
The whole geo-enchilada
Lastly, to make you really feel warm and good inside, the GeoNames database is provided for direct download under a Creative Commons Attribution license. Yum, free data.
See the GeoNames Blog post about it.