docs: function(cfg, callback) {
    // Filter all CoffeeScript files
    var coffeeFiles = filterInput(cfg.input_files, '.coffee');
  
    // Filter all JavaScript files
    var jsFiles = filterInput(cfg.input_files, '.js');
  
    // Output file path
    var outputPath = path.join(cfg.output_dir, cfg.output_file);
  
    // JavaScript code from compiled CoffeScript files
    var coffeeCompiledCode = '';
  
    // Callback for CoffeScript compilation completed
    var onCoffeeCompileComplete = function(result) {
      coffeeCompiledCode = result;
    };
  
    // Callback for script concatenation task
    var concatWithCoffeeCompiledCode = function(result) {
      return result + '\n' + coffeeCompiledCode;
    };
  
    // Callback for lint task
    var onJSLinted = function(blob) {
      if (blob.jslint && blob.jslint.length) {
        console.log('\nJSLint reports issues in: '.red + blob.name);
        blob.jslint.forEach(function(i){
          if (i) {
            console.log(' Line ' + i.line + ', Col ' + i.character + ': ' + i.reason);
          }
        });
      }
    };
  
    // Build Scripts
    if (jsFiles.length + coffeeFiles.length > 0) {
      new gear.Queue({registry: taskRegistry}) // register tasks
      .log(formatLog('Building scripts:', jsFiles.concat(coffeeFiles)))
      .tasks({
        readcf:       {task: ['read', coffeeFiles]},
        combinecf:    {requires: 'readcf', task: 'safeconcat'},
        coffeetojs:   {requires: 'combinecf', task: ['coffeecompile', {callback: onCoffeeCompileComplete}]},
        readjs:       {requires: 'coffeetojs', task: ['read', jsFiles]},
        lint:         {requires: 'readjs', task: cfg.lint ? ['jslint', {config: cfg.lint_config, callback: onJSLinted}] : 'noop'},
        combinejs:    {requires: 'lint', task: 'safeconcat'},
        combineall:   {requires: 'combinejs', task: ['concat', {callback: concatWithCoffeeCompiledCode}]},
        minify:       {requires: 'combineall', task: cfg.minify ? ['jsminify', {config: cfg.minify_config}] : 'noop'},
        write:        {requires: 'minify', task: ['write', outputPath]}
      })
      .log(formatLog('Saved scripts to:', outputPath))
      .run(callback);
    } else {
      callback();
    }
  }