I'm not following this thread *too* closely, but there are a couple ways
that grunt allows additional args from the command line. I'm suggesting
these as potential ways to deal with the task/multitask/target scenarios:

For instance, assuming a 'deploy' multitask with 'production' and 'staging'
targets, assuming each target also had 'aws' and 'digitalocean'
destinations, you could invoke it via:

`grunt deploy:production:aws`
and
`grunt deploy:production:digitalocean`

Within the task, this.args would be ['aws'] or ['digitalocean'],
respectively. (Also available is this.flags => {aws:true} or
{digitalocean:true}, respectively).  (
http://gruntjs.com/api/inside-tasks#this.args,
http://gruntjs.com/api/inside-tasks#this.flags)

You can add as many colon-separated arguments on the command line as
needed. These are useful for flag-like arguments that are essentially
boolean. (They alter behavior based on their existence, not needing a value
per-se.)

For command-line options that need a value, the grunt API will pass along
any options into this.options('environment') if invoked as `grunt deploy
--environment=production`.
http://gruntjs.com/frequently-asked-questions#options

There's also the dynamic alias, but I don't think that is really
appropriate here:
http://gruntjs.com/frequently-asked-questions#dynamic-alias-tasks
​