docs: function (src, dst, config, headers, callback) {
  
          if (_.isFunction(headers)) {
              callback = headers;
              headers = undefined;
          }
  
          var options = config.options;
  
          if (!fsys.isFileSync(src)) {
              return callback(new Error('source file not found. path:', src));
          }
  
          _.defaults(options || (options = {}), DEFAULT_OPTIONS);
          var encode = options.encode;
          var compress = options.compress;
          var firebug = options.firebug;
          var linenos = options.linenos;
          var urlopt = options.url;
  
  
          var raw = fs.readFileSync(src, encode);
  
          var styl = stylus(raw)
                  .set('filename', dst)
                  .set('compress', compress)
                  .set('firebug', firebug)
                  .set('linenos', linenos)
                  .define('b64', stylus.url(urlopt))
          ;
  
          if (options.nib) { // use nib library
              styl.use(nib());
          }
  
          // extend options
          if (config.hasOwnProperty('extend') && headers && common.isUAOverride(config, headers) && config.extend.hasOwnProperty('content')) {
              options = obj.copy(config.extend.content, config).options;
              logger.debug('Override stylus options:', options);
          }
  
          // define functions and constant values
          if (options.fn && Object.keys(options.fn).length) {
              styl.use(function (styl) {
                  _.each(options.fn, function (fn, name) {
                      if (_.isFunction(fn)) {
                          styl.define(name, function (data) {
                              return fn(data && data.val);
                          });
                      } else {
                          styl.define(name, function () {
                              return fn;
                          });
                      }
                  });
              });
          }
  
          styl.render(function (err, css) {
              err && callback(err, css);
  
              fs.writeFileSync(dst, css, encode);
              callback(null, css);
          });
      }