Because puppet doesn't have any kind of intelligence around your cluster/farm there is no way to make that kind of decision of when to apply updates. About the best thing you can do is build a mcollective application that goes through your server farm and runs puppet on x nodes at a time and verifies the working state of each node before moving to the next. All this verification is going to be custom work.
Puppet does a great job of ensuring things are installed, running , and configured. But it doesn't know anything about the health of your application and how its supposed to work. So your going to have to build a rolling update mcollective application that would run a custom health check on each node. Furthermore if using a load balancer you would also want to disable/remove the node from the load balancer pool before running puppet. This can be done via http checks or by running cli commands on the load balancer to remove the node.