code: function task() {
  	// make sure the release task has been initialized
  	init.apply(this, arguments);
  	var name, desc, deps, cb;
  	for (var i = 0; i < arguments.length; i++) {
  		if (typeof arguments[i] === 'string') {
  			if (name) {
  				desc = arguments[i];
  			} else {
  				name = arguments[i];
  			}
  		} else if (typeof arguments[i] === 'function') {
  			cb = taskCallback(arguments[i]);
  		} else if (Array.isArray(arguments[i])) {
  			deps = arguments[i];
  		}
  	}
  	if (rbot.env.usingGrunt) {
  		if (name && desc) {
  			return rbot.env.taskRunner.registerTask(name, desc, cb);
  		} else if (name && deps) {
  			return rbot.env.taskRunner.registerTask(name, deps);
  		}
  		throw new Error('Invalid grunt.registerTask() for: name = "' + name + '", desc = "' + desc + '", taskList = "'
  				+ deps + '", function = "' + cb + '"');
  	} else {
  		if (name && deps && cb) {
  			return rbot.env.taskRunner.task(name, deps, cb);
  		} else if (name && cb) {
  			return rbot.env.taskRunner.task(name, cb);
  		}
  		throw new Error('Invalid gulp.task() for: name = "' + name + '", deps = "' + deps + '", function = "' + cb
  				+ '"');
  	}
  }
docs: Registers a task runner neutral API for a task. If using Grunt "registerTask"
  is executed. If using Gulp "task" is executed. In either case the arguments
  are passed in the expected order regardless of how they are passed into this
  function.
  
  @returns the return value from the task runner API