Puppet needs some kind of simple mechanism to distribute load on a single server.
What I've been thinking is providing a simple method on the server for clients to ask what the server's load is. That way, each client could connect, check the load, and if the server is loaded wait a few minutes or whatever to connect, and if the server is free, then go ahead and run the configuration immediately.
That should provide decent load distribution across the Puppet run interval (half an hour or whatever) while providing very good interactive performance for users -- i.e., if you go to a client and run the client directly, it will run right away, without sleeping for five minutes or whatever.
This should be a relatively straightforward implementation -- a method on the server, and a call plus some sleeping on the client.