Code review comment: Should be at one place, but there are lot of references in the code, where AsyncDocumentClient.build() is being used directly without CosmosClientBuilder, so didn't want to take chances and leave this check.

Code under review:
public AsyncDocumentClient build() {

            ifThrowIllegalArgException(this.serviceEndpoint == null, "cannot build client without service endpoint");
            ifThrowIllegalArgException(
                    this.masterKeyOrResourceToken == null && (permissionFeed == null || permissionFeed.isEmpty())
                        && this.tokenResolver == null && this.cosmosKeyCredential == null,
                    "cannot build client without any one of masterKey, " +
                        "resource token, permissionFeed, tokenResolver and cosmos key credential");
            ifThrowIllegalArgException(cosmosKeyCredential != null && StringUtils.isEmpty(cosmosKeyCredential.getMasterKey()),
                "cannot build client without key credential");

            RxDocumentClientImpl client = new RxDocumentClientImpl(serviceEndpoint,
                                                                   masterKeyOrResourceToken,
                                                                   permissionFeed,
                                                                   connectionPolicy,
                                                                   desiredConsistencyLevel,
                                                                   configs,
                                                                   tokenResolver,
                                                                    cosmosKeyCredential);
            client.init();
            return client;
        }

Line commented on: this.masterKeyOrResourceToken == null && (permissionFeed == null || permissionFeed.isEmpty())

Revised code:
public AsyncDocumentClient build() {

            ifThrowIllegalArgException(this.serviceEndpoint == null, "cannot build client without service endpoint");
            ifThrowIllegalArgException(
                    this.masterKeyOrResourceToken == null && (permissionFeed == null || permissionFeed.isEmpty())
                        && this.tokenResolver == null && this.cosmosKeyCredential == null,
                    "cannot build client without any one of masterKey, " +
                        "resource token, permissionFeed, tokenResolver and cosmos key credential");
            ifThrowIllegalArgException(cosmosKeyCredential != null && StringUtils.isEmpty(cosmosKeyCredential.key()),
                "cannot build client without key credential");

            RxDocumentClientImpl client = new RxDocumentClientImpl(serviceEndpoint,
                                                                   masterKeyOrResourceToken,
                                                                   permissionFeed,
                                                                   connectionPolicy,
                                                                   desiredConsistencyLevel,
                                                                   configs,
                                                                   tokenResolver,
                                                                    cosmosKeyCredential);
            client.init();
            return client;
        }