We start with a base image and then use puppet to manage anything that needs to be installed/setup.
Firing off a bcfg2 push would take almost 20 minutes, which was pretty unusable; The big problem was that it didn't handle large numbers of connections simultaneously well, so I ended up having to stagger them.
CFengine was able to do the same push in < 30 seconds. Win.
I'll be looking at Chef again in the near future. It's got a LOT of nice features; Hopefully we can make it scale out quickly.