code: public void store( Iterable<JcrNodeType> nodeTypes,
                         boolean updateExisting ) {
          MutableCachedNode nodeTypesNode = mutableNodeTypesNode();
          Set<Name> names = new HashSet<Name>();
          Set<NodeKey> keys = new HashSet<NodeKey>();
          for (JcrNodeType nodeType : nodeTypes) {
              if (!names.add(nodeType.getInternalName())) {
                  Logger.getLogger(getClass()).debug("Found duplicate node type: " + nodeType);
              }
              if (!keys.add(nodeType.key())) {
                  Logger.getLogger(getClass()).debug("Found duplicate key: " + nodeType);
              }
          }
          for (JcrNodeType nodeType : nodeTypes) {
              store(nodeType, nodeTypesNode, updateExisting);
          }
      }
docs: Stores the node types in the system area under <code>/jcr:system/jcr:nodeTypes</code>.
  <p>
  For each node type, a node is created with primary type of <code>nt:nodeType</code> and a name that corresponds to the node
  type's name. All other properties and child nodes for the newly created node are added in a manner consistent with the
  guidance provided in section 6.7.22 of the JCR 1.0 specification and section 4.7.24 of the JCR 2.0 specification where
  possible.
  </p>
  
  @param nodeTypes the node types to write out; may not be null
  @param updateExisting a boolean flag denoting whether the new node type definition should be overwrite an existing node
  type definition