code: public <T> T n1qlToRawCustom(final N1qlQuery query, final Func1<TranscoderUtils.ByteBufToArray, T> deserializer) {
          return Blocking.blockForSingle(async.n1qlToRawCustom(query, deserializer), env.queryTimeout(), TimeUnit.MILLISECONDS);
      }
docs: Synchronously perform a {@link N1qlQuery} and apply a user function to deserialize the raw N1QL
  response, which is represented as a "TranscoderUtils.ByteBufToArray".
  
  The array is derived from a {@link ByteBuf} that will be released, so it shouldn't be used
  to back the returned instance. Its scope should be considered the scope of the call method.
  
  Note that the query is executed "as is", without any processing comparable to what is done in
  {@link Bucket#query(N1qlQuery)} (like enforcing a server side timeout or managing prepared
  statements).
  
  @param query the query to execute.
  @param deserializer a deserializer function that transforms the byte representation of the response into a custom type T.
  @param <T> the type of the response, once deserialized by the user-provided function.
  @return the N1QL response as a T.