Great question.
Github has a project called Boxen that does this for Mac OSX: http://boxen.github.com/
Google uses their own Puppet solution for their developer workstations: http://www.youtube.com/watch?v=YlKXRdSAZhY
Ansible will work great for this too - particularly if you're on Linux.