code: function self_method(data, methods) {
              if (!data) {
                  return data;
              }
  
              var i, ii, prop;
  
              if (data.constructor === ({}).constructor) {
                  for (prop in data) {
                      if (_.isUndefined(data[prop])) {
                          delete data[prop];
                          continue;
                      }
  
                      data[prop] = self_method(data[prop], methods);
                  }
              }
              else if (_.isArray(data)) {
                  for (i = 0, ii = data.length; i < ii; ++i) {
                      if (_.isUndefined(data[i])) {
                          --i; --ii;
                          continue;
                      }
  
                      data[i] = self_method(data[i], methods);
                  }
              }
              else {
  
                  methods = _.extend({}, methods, { __getData: null });
  
                  _.each(methods, function(params, method) {
  
                      if (!_.isFunction(data[method])) {
                          return;
                      }
  
                      if (_.isNull(params) || _.isUndefined(params)) {
                          params = [];
                      }
                      if (!_.isArray(params)) {
                          params = [params];
                      }
  
                      data = data[method].apply(data, params);
                  });
              }
  
              return data;
          }
docs: Process object data
  
  @param {object} data    Object data
  @param {object} methods Getter methods
  @returns {object} Processed data
  
  @this {clazz|object}