code: public final <T2, O> Mono<O> zipWith(Mono<? extends T2> other,
  			BiFunction<? super T, ? super T2, ? extends O> combinator) {
  		if (this instanceof MonoZip) {
  			@SuppressWarnings("unchecked") MonoZip<T, O> o = (MonoZip<T, O>) this;
  			Mono<O> result = o.zipAdditionalSource(other, combinator);
  			if (result != null) {
  				return result;
  			}
  		}
  
  		return zip(this, other, combinator);
  	}
docs: Combine the result from this mono and another into an arbitrary {@code O} object,
  as defined by the provided {@code combinator} function.
  <p>
  An error or <strong>empty</strong> completion of any source will cause the other source
  to be cancelled and the resulting Mono to immediately error or complete, respectively.
  
  <p>
  <img class="marble" src="doc-files/marbles/zipWithOtherUsingZipperForMono.svg" alt="">
  
  @param other the {@link Mono} to combine with
  @param combinator a {@link BiFunction} combinator function when both sources
  complete
  @param <T2> the element type of the other Mono instance
  @param <O> the element type of the combination
  
  @return a new combined Mono