code: function () {
  		//check if we are able to execute
  		if (!canExecuteWrapper.call(options.context || this)) {
  			//dont attach any global handlers
  			return instantDeferred(false, null, options.context || this).promise();
  		}
  
  		//notify that we are running and clear any existing error message
  		isRunning(true);
  		failed(false);
  		failMessage('');
  
  		//try to invoke the action and get a reference to the deferred object
  		var promise;
  		try {
  			promise = options.action.apply(options.context || this, arguments);
  
  			//if the returned result is *not* a promise, create a new one that is already resolved
  			if (!isPromise(promise)) {
  				promise = instantDeferred(true, promise, options.context || this).promise();
  			}
  
  		} catch (error) {
  			promise = instantDeferred(false, error, options.context || this).promise();
  		}
  
  		//set up our callbacks
  		callbacks.always.forEach(function(callback) {
  			promise.then(callback, callback);
  		});
  		callbacks.fail.forEach(function(callback) {
  			promise.then(null, callback);
  		});
  		callbacks.done.forEach(function(callback) {
  			promise.then(callback);
  		});
  
  		return promise;
  	}
docs: execute function (and return object