docs: function (resourceObject, paramDefaults, actions, options) {
                          var resources = this[config.linksKey];
                          var parameters = paramDefaults;
  
                          var urlTemplates = "";
  
                          // split the resourceObject to extract the URL templates for the $resource method
                          if (hasUrlTemplate(resourceObject)) {
                              var extractedUrlTemplates = extractUrlTemplates(resourceObject);
                              resourceObject = extractedUrlTemplates[0];
                              urlTemplates = extractedUrlTemplates[1];
                          }
  
                          // if a resource object is given process it
                          if (angular.isObject(resourceObject)) {
                              if (!resourceObject.name) {
                                  throw new Error("The provided resource object must contain a name property.");
                              }
  
                              var resourceObjectParameters = resourceObject.parameters;
  
                              // if the default parameters and the resource object parameters are objects, then merge these two objects
                              // if not use the objects themselves as parameters
                              if (paramDefaults && angular.isObject(paramDefaults)) {
                                  if (resourceObjectParameters && angular.isObject(resourceObjectParameters)) {
                                      parameters = angular.extend(angular.copy(paramDefaults), angular.copy(resourceObjectParameters));
                                  } else {
                                      parameters = angular.copy(paramDefaults);
                                  }
                              } else {
                                  if (resourceObjectParameters && angular.isObject(resourceObjectParameters)) {
                                      parameters = angular.copy(resourceObjectParameters);
                                  }
                              }
  
                              // remove parameters which have an empty string as value
                              angular.forEach(parameters, function (value, key) {
                                  if (value === "") {
                                      delete parameters[key];
                                  }
                              });
  
                              // process the url and call the resources function with the given parameters
                              return resourcesFunction(getProcessedUrl(data, resourceObject.name), parameters, actions, options);
                          } else if (resourceObject in resources) {
  
                              // process the url, add the url templates and call the resources function with the given parameters
                              return resourcesFunction(getProcessedUrl(data, resourceObject) + urlTemplates, parameters, actions, options);
                          }
  
                          // return the available resources as resource object array if the resource object parameter is not set
                          var availableResources = [];
                          angular.forEach(resources, function (value, key) {
  
                              // if the URL is templated add the available template parameters to the returned object
                              if (value.templated) {
                                  var templateParameters = extractTemplateParameters(value[config.linksHrefKey]);
                                  availableResources.push({"name": key, "parameters": templateParameters});
                              } else {
                                  availableResources.push({"name": key});
                              }
                          });
                          return availableResources;
                      }