code: public Object withBuilder(Map attributes, FactoryBuilderSupport builder, String name, Closure closure) {
          if (name == null) {
              return null;
          }
          Object result = getProxyBuilder().withBuilder(builder, closure);
          return getProxyBuilder().invokeMethod(name, new Object[]{attributes, result});
      }
docs: Switches the builder's proxyBuilder during the execution of a closure.<br>
  This is useful to temporary change the building context to another builder
  without the need for a contrived setup. It will also take care of restoring
  the previous proxyBuilder when the execution finishes, even if an exception
  was thrown from inside the closure. Additionally it will use the closure's
  result as the value for the node identified by 'name' and assign any attributes
  that might have been set.
  
  @param attributes additional properties for the node on the parent builder.
  @param builder    the temporary builder to switch to as proxyBuilder.
  @param name       the node to build on the 'parent' builder.
  @param closure    the closure to be executed under the temporary builder.
  @return a node that responds to value of name with the closure's result as its
  value.
  @throws RuntimeException - any exception the closure might have thrown during
  execution.