docs: function getMethods(spec_c, parent) {
    var spec_js = {};
    var methods = _.find(getChildren(spec_c, 'sectiondef'), function(section) {
      var kind = getAttr(section, 'kind');
      return ((kind == 'public-func') || (kind == 'func'));
    });
    if (methods) {
      _.each(methods.children, function(method) {
        var methodName = getText(getChild(method, 'name'), 'name');
        if (methodName[0] != '~') { // filter out destructors
          try {
            var description = getChild(method, 'detaileddescription');
            var methodDescription = getText(description, 'description');
            var paramsSpec = getChildren(method, 'param');
            var params = {};
            if (hasParams(paramsSpec)) {
                params = getParams(paramsSpec, getParamsDetails(description), methodName, parent);
            }
            var returnSpec = getChild(method, 'type');
            var retval = {};
            if (!_.isEmpty(returnSpec)) {
              retval = getReturn(returnSpec, getReturnDetails(description), methodName, parent);
            }
            methodName = getUniqueMethodName(methodName, spec_js, parent);
            spec_js[methodName] = {
              description: methodDescription,
              params: params,
              return: retval
            };
          } catch(e) {
            console.log((parent ? (parent + '.') : '') + methodName + ' is omitted from JS documentation.');
            console.log('  ' + e.toString());
          }
        }
      });
    }
    return spec_js;
  }