I am posting this as a roadmap for anyone else heading down the same path.
If you do want to use a Shell Task, first make sure you are familiar with section 8.5.11 of the user guide, then:
1. In activiti-explorer use the designer to create a service task, give it a class of something like: org.example.shellTask,
2. export it
3. use the text editor of you choice to edit the exported file and change 'activiti:class="org.example.shellTask"' to 'activiti:type="shell"
4. use REST api to create a new deployment (section 15.2.3 of the user guide)
However, we have since decided to use groovy to launch server side shells to connect to our legacy system. We made this decision because:
a) it allows us to capture both standard and error output in the script,
b) in some case we can combine two shell calls in the single script task,
c) in some cases we can combine a script task used to prepare values for the shell task, and the shell task into the single script task,
d) it is relatively fast, and
e) probably the most important, we avoid the awkward manual export, edit, deploy step