docs: function convert( name, path, contents ) {
          var amdName;
          // Convert var modules
          if ( /.\/var\//.test( path ) ) {
              contents = contents
                  .replace( /define\([\w\W]*?return/, "var " + (/var\/([\w-]+)/.exec(name)[1]) + " =" )
                  .replace( rdefineEnd, "" );
          } else {
  
              // Ignore franky's exports (the only necessary one)
              if ( name !== "franky" ) {
                  contents = contents
                      .replace( /\s*return\s+[^\}]+(\}\);[^\w\}]*)$/, "$1" )
                      // Multiple exports
                      .replace( /\s*exports\.\w+\s*=\s*\w+;/g, "" );
              }
  
              // Remove define wrappers, closure ends, and empty declarations
              contents = contents
                  .replace( /define\([^{]*?{/, "" )
                  .replace( rdefineEnd, "" );
  
              // Remove anything wrapped with
              // /* ExcludeStart */ /* ExcludeEnd */
              // or a single line directly after a // BuildExclude comment
              contents = contents
                  .replace( /\/\*\s*ExcludeStart\s*\*\/[\w\W]*?\/\*\s*ExcludeEnd\s*\*\//ig, "" )
                  .replace( /\/\/\s*BuildExclude\n\r?[\w\W]*?\n\r?/ig, "" );
  
              // Remove empty definitions
              contents = contents
                  .replace( /define\(\[[^\]]+\]\)[\W\n]+$/, "" );
          }
          // AMD Name
          if ( (amdName = grunt.option( "amd" )) != null && /^exports\/amd$/.test( name ) ) {
              if (amdName) {
                  grunt.log.writeln( "Naming franky with AMD name: " + amdName );
              } else {
                  grunt.log.writeln( "AMD name now anonymous" );
              }
              // Remove the comma for anonymous defines
              contents = contents
                  .replace( /(\s*)"franky"(\,\s*)/, amdName ? "$1\"" + amdName + "\"$2" : "" );
  
          }
          return contents;
      }