@Hugolpz - sorry, I didn't I didn't respond. I didn't get notified of your comment.
I finally figured it out. I'm recording it here so maybe it will help someone.
I originally got my zip code shapefiles from the US Census website (currently down because of government shutdown). It was called tl_2012_us_zcta510.zip and was 836MB. I tried to convert it using topojson using the parameters @mbostock suggested here: http://bl.ocks.org/mbostock/4965422
Conversion took over 12 hours giving node.js 6GB of memory to convert the shapefile into a topojson file. It still wouldn't work in d3.js (see errors in original question). Also, debugging that large of a json file it was difficult to debug. The original shapefile also wouldn't display in QGIS.
I eventually gave up and searched for different data sets. Geocommons has a 5MB zipcode shapefile with properties such as zipcode, state, name, population and area: http://geocommons.com/overlays/54893. I handed it over to topojson and it converted the shapefile in under a minute:
topojson \
-p name=PO_NAME \
-p zip=ZIP \
-p state=STATE \
-o zips_us_topo.json \
zip_codes_for_the_usa.shp
In order to inspect the json file to understand it, I used https://github.com/einars/js-beautify with this command:
js-beautify zips_us_topo.json -o zips_us_topo_pretty.json
I used the non-prettified version to load in the browser though because it's smaller.
To map it, I essentially used the same code as @mbostock's county chloropleth map. If you need that or the d3 code or cleaned up topojson file you can get them here: