Using Python and R, what would be the best strategy to tie Census Block-level data to zip/zip + 4? I understand we're not matching polygon boundaries (zip codes are not geographies), but somehow service bureaus/lettershops tie addresses to Census demographic data. Do they work off zip+4 centroids? How can this lookup be updated with new zip/zip+4 definitions (i.e. not be bound by the 2010 ZTCA). Thanks for any pointers/links/book references.
ZCTAs are now updated between censuses using American Community Survey data. Because ZCTAs are small areas, you can only get them in the five-year releases. The latest ZCTAs are in the ACS 2012 5-year release.
ZCTAs of course don't conform exactly to ZIP Codes, but if your goal is just to get plausible demographics at the ZIP Code level, this is by far the easiest way. If you want to develop own solution, you would have to use areal allocation (intersect the the polygons, then distribute the population based on proportion of area overlapping) or dasymetric mapping.