I had some service (iscsid) which hung for ever for some reason (missing config file), when stopping it via `service iscsid stop`.
As puppet should stop that service, puppet hung as well. Over days...
I think it's pretty reasonable to expect services to be stopped after some time (like 10 minutes?) and if they didn't return so far, give up (and kill the service process) and mark the service resource as failed.
Additionally an additional parameter could be added to the service type: `command_timeout` which could tweak the default of how long puppet will wait to get some feedback from the start, stop, status command.