docs: function(includeDatasets, fromModel) {
              var ds = this.mergeOptions({}),
                  originalRowCb = ds.rowCb;
  
              if(!ds.__opts._eagerAssoc) {
                  ds.__opts._eagerAssoc = includeDatasets;
                  ds.rowCb = function (topLevelResults) {
  
                      function toObject(thing) {
                          if (!thing) {
                              return comb.when(thing);
                          }
                          if (Array.isArray(thing)) {
                              return comb.when(thing.map(function(item) {
                                  return toObject(item);
                              }));
                          }
                          if ('toObject' in thing) {
                              return comb.when(thing.toObject());
                          }
                          return comb.when(thing);
                      }
  
                      var eagerResults = {},
                          whens = [];
  
                          if (!originalRowCb) {
                              // pass through for when topLevelResults is already resolved
                              originalRowCb = function(r){return r;};
                          }
  
                          return comb.when(originalRowCb(topLevelResults)).chain(function(maybeModel) {
                              whens = Object.keys(ds.__opts._eagerAssoc).map(function(key) {
                                  return ds.__opts._eagerAssoc[key](maybeModel).chain(function(result) {
                                      return toObject(result).chain(function(res) {
                                          eagerResults[key] = res;
                                          return result;
                                      });
                                  });
                              });
  
                              return comb.when(whens).chain(function () {
                                  return toObject(maybeModel).chain(function(json) {
                                      // merge associations on to main data
                                      return Object.assign(json, eagerResults);
                                  });
                              });
  
                          });
                  };
              }
  
              return ds.mergeOptions({
                  _eagerAssoc: Object.assign(ds.__opts._eagerAssoc, includeDatasets)
              });
          }