IMO, Puppet isn't quite the right fit for application deployments in a lot of situations. In Drupal-speak - if you have multiple Drupal frontends with a shared MySQL backend, Puppet doesn't fit for deployments very well. What you need in that case is an orchestration tool.
Why? Puppet cares about state, but it's not the best thing for applying states to machines at a certain time in a certain order. Often times with Drupal, you have a workflow to complete as part of a deployment: 1) Put up the maintenance page 2) Upgrade the application server code 3) Upgrade the db. If the DB gets upgraded before all the appservers are running the latest code, fun ensues.
There's all kinds of tools that are more ideal for that - Jenkins, Capistrano, MCollective, and Rundeck are a few.
We use Puppet to initially setup a machine to participate in the cluster. When provisioned, it will have the same revision of code as everything else. However, for coordinated deployments of already deployed applications, we rely upon other tools.
HTH,
Justin