First assumption is correct.
As for your second question, I would say that the above boilerplate code indeed needs to be placed in every processdefinition. If you don't want to do this, I think you could do something with runtime actions. Create a custom deployer that does not merely deploys the processdefinitions, but also creates a runtime action and associates this action with the task-assign event on the deployed process...
Let us know if this works.