docs: function (project, parameters, callback) {
              var deferred = Q.defer(),
                  rawJson;
  
              getRootHash(project, parameters || {})
                  .then(function (rootHash) {
                      return Q.all([
                          _collectObjectAndAssetHashes(project, rootHash),
                          project.getProjectInfo()
                      ]);
                  })
                  .then(function (res) {
                      var hashes = res[0],
                          info = res[1];
                      rawJson = {
                          rootHash: parameters.rootHash,
                          projectId: project.projectId,
                          kind: typeof parameters.kind === 'string' ? parameters.kind : info.info.kind,
                          branchName: parameters.branchName,
                          commitHash: parameters.commitHash,
                          hashes: hashes,
                          objects: null
                      };
                      return _collectObjects(project, hashes.objects);
                  })
                  .then(function (objects) {
                      rawJson.objects = objects;
                      deferred.resolve(rawJson);
                  })
                  .catch(deferred.reject);
  
              return deferred.promise.nodeify(callback);
          }