docs: function () {
        var getConflictingDependencies = function (dependencies) {
          var conflicts = [];
          if (!dependencies) {
            return conflicts;
          }
          // for each dependency, extract and check the qualified artifactId
          dependencies.forEach(function (dependency) {
            function filterByDependencyString (dep) {
              return typeof dependency === 'string' ? dependency === dep : _.isEqual(dependency, dep);
            }
  
            var arrayOfEqualDependencies = dependencies.filter(
              filterByDependencyString);
  
            // find dependency in conflicts if dependency is n object
            var findedDep;
            if (typeof dependency === 'object') {
              findedDep = conflicts.find(function (dep) {
                return dep.artifactId === dependency.artifactId && dep.webpackageId === dependency.webpackageId && dep.endpointId === dependency.endpointId;
              });
            }
            if (arrayOfEqualDependencies.length > 1 && conflicts.indexOf(dependency) < 0 && !findedDep) {
              conflicts.push(dependency);
            }
          });
          return conflicts;
        };
  
        var doUniqueDependenciesCheck = function (artifact) {
          var conflictingDependencies = [];
          if (doc.modelVersion.indexOf('8.') === 0) { // we do have at least one endpoints for each artifact (modelVersion 8.x.x)
            // for each artifacts endpoint, check it's dependencies
            artifact.endpoints.forEach(function (endpoint) {
              conflictingDependencies = endpoint.dependencies ? getConflictingDependencies(endpoint.dependencies) : [];
  
              conflictingDependencies.forEach(function (dependency) {
                errors.push('RuleViolation identified: Artifact \'' + artifact.artifactId + '\' / endpoint \'' +
                  endpoint.endpointId + '\' contains multiple references to dependency \'' + dependency +
                  '\'');
              });
            });
          } else { // we don't have endpoints in artifact (modelVersion 9.x.x)
            // for each artifact, check it's dependencies
            conflictingDependencies = artifact.dependencies ? getConflictingDependencies(artifact.dependencies) : [];
  
            conflictingDependencies.forEach(function (dependency) {
              var dependencyStr = typeof dependency === 'object' ? JSON.stringify(dependency) : dependency;
              errors.push('RuleViolation identified: Artifact \'' + artifact.artifactId +
                '\' contains multiple references to dependency \'' + dependencyStr + '\'');
            });
          }
        };
        //
        var allArtifacts = [];
        // collect artifacts
        if (doc.artifacts) {
          var artifactTypes = Object.keys(doc.artifacts);
          artifactTypes.forEach(function (artifactType) {
            allArtifacts = allArtifacts.concat(doc.artifacts[ artifactType ]);
          });
        }
        // call rule for each artifact
        allArtifacts.forEach(function (artifact) {
          if (artifact.endpoints || artifact.dependencies) {
            doUniqueDependenciesCheck(artifact);
          }
        });
      }