docs: function(config){
  
        opts = xtend(opts, {
          verbose: opts.verbose || config.options.verbose || config.build.options.verbose,
          force: config.build.options.force || false
        });
  
        var _newArgs = [],
        _bin,
        patsy = this;
  
        if(patsy.utils.isWin){
  
          _bin       = "cmd";
          var _cmdName   = 'node_modules\\.bin\\grunt';
  
          //New args will go to cmd.exe, then we append the args passed in to the list
          //  the /c part tells it to run the command.  Thanks, Windows...
          _newArgs.push('/c');
          _newArgs.push(_cmdName);
  
          if(opts.verbose){
  
            util.print('>>'.cyan + ' Loading grunt\nCommand options: ' + String(_bin + ' /c ' + _cmdName + ' --path ' + config.project.environment.abs_path).cyan + '\n');
  
          }
  
        } else {
  
          if(opts.verbose){
  
            util.print('>>'.cyan + ' Loading grunt\nCommand options: ' + String('node_modules/.bin/grunt --path ' + config.project.environment.abs_path).cyan + '\n');
          }
  
          _bin        = 'node_modules/.bin/grunt';
  
        }
  
        // Append needed arguments for grunt
        _newArgs.push('--path');
        _newArgs.push(config.project.environment.abs_path);
        _newArgs.push('--stack');
  
        if(opts.verbose){
  
          _newArgs.push('-v');
  
        }
  
        if(opts.force){
  
          _newArgs.push('--force');
  
        }
  
        // Spawn grunt instance
        patsy.grunt     = spawn(_bin, _newArgs, { stdio: 'inherit' });
  
        patsy.scripture.print('[Patsy]'.yellow + ': The grunt is saddling up!');
  
        // Can be commented back in again, just testing if this is necessary
        //this.grunt.stderr.pipe(process.stdout);
        var warnings = [];
  
        /*this.grunt.stdout.on('data',function(data){
          var buff = new Buffer(data);
          console.log("foo: " + buff.toString('utf8'));
        });*/
  
        /*this.grunt.stdout.on('data',function(data){
  
          data = String(data).trim();
  
          // Do not print out empty lines/strings
          if(data !== ''){
  
            // If opts verbose is set, output is piped directly from grunt
            if(opts.verbose){
  
              util.puts( data );
            }
            // If not verbose, use scripture or other
            else {
  
              if(data.indexOf('Done, without errors') !== -1){
  
                patsy.scripture.print('[Patsy]'.yellow + ': The grunt has finished building without errors!');
              } else if(data.indexOf('Done, but with warnings') !== -1){
  
                patsy.scripture.print('[Patsy]'.yellow + ': The grunt has finished building, but with warnings!');
  
                if(warnings.length !== 0){
  
                  util.print(warnings.join('\n'));
                  warnings = [];
                }
              } else if(data.indexOf('Waiting..') !== -1){
  
                patsy.scripture.print('[Grunt]'.green + ': Watching for changes my Liege!'.bold);
              } else if(data.indexOf('changed') !== -1){
  
                patsy.scripture.print('[Grunt]'.green + ': File changed! Running tasks..'.bold);
              } else if(data.indexOf('not found') !== -1){
  
                warnings.push(data);
              } else {
  
                if(warnings.length !== 0){
  
                 // patsy.scripture.print('[Patsy]'.yellow + ': The grunt has finished building, but with warnings!'.yellow);
                  util.print(warnings.join('\n'));
                  warnings = [];
                }
              }
            }
          }
  
        });*/
  
        /*this.grunt.stderr.on('data',function(data){
          try{
            var buff = new Buffer(data);
            data = buff.toString('utf8');
          } catch(e){
  
          }
  
  
          warnings.push(String('Warning: Grunt: ' + data).yellow);
  
        });
  */
        this.grunt.on('exit',function(code){
  
          if(opts.verbose){
  
            patsy.utils.fail('Grunt exception! ' + code.red);
  
          }
  
          patsy.scripture.print('[Patsy]'.yellow + ': The grunt has buggered off! ' + code.red + "\n");
  
  
  
          process.exit(1);
        });
      }