I am thinking of using ServiceTask with arbitrary properties that would be great to have in process definition.
Unfortunately ServiceTask only allows "activiti:field" and that forces your ServiceTask Java class to have only predefined "fields" - properties, basically you can't handle arbitrary number and named "properties" with that layout. You need "activiti:formProperties" or something like it for that.
A service task can have any extension element you define. These extension elements are parsed by Activiti and available in the BpmnModel instance of a process definition. The RepositoryService has a method to get the BpmnModel with a process definition identifier.