### Description

This is a followup to #85926.

As part of the ingest processing pipeline, we call `CollectionUtils.ensureNoSelfReferences(...)` to ensure that a script processor didn't accidentally introduce a circular object. However, this check is only necessary if we know there was the potential for a circular option, which can only happen with either a custom processor (a plugin where we have no control), or a script processor. We should be able to only call this sanity check if we know we need it, rather than for every document.
libs/x-content/src/main/java/org/elasticsearch/xcontent/XContentBuilder.java
public interface Writer {
        void write(XContentBuilder builder, Object value) throws IOException;
    }
    /**
     * Interface for transforming complex objects into their "raw" equivalents for human-readable fields
     */
    @FunctionalInterface
    public interface HumanReadableTransformer {
        Object rawValue(Object value) throws IOException;
    }
    /**
     * XContentGenerator used to build the XContent object
     */
    private final XContentGenerator generator;
    /**
     * Output stream to which the built object is written
     */
    private final OutputStream bos;
    private final RestApiVersion restApiVersion;
    private final ParsedMediaType responseContentType;
    /**
     * When this flag is set to true, some types of values are written in a format easier to read for a human.
     */
    private boolean humanReadable = false;
    /**
     * Constructs a new builder using the provided XContent and an OutputStream. Make sure
     * to call {@link #close()} when the builder is done with.
     */
    public XContentBuilder(XContent xContent, OutputStream bos) throws IOException {