{
    "$schema": "http://json-schema.org/draft-04/schema#",
    "definitions": {
        "address": {
            "type": "object",
            "properties": {
                "street_address": {
                    "type": "string"
                },
                "city": {
                    "type": "string"
                },
                "state": {
                    "type": "string"
                }
            },
            "required": [
                "street_address",
                "city",
                "state"
            ]
        },
        "office_address": {
            "properties": {
                "type": {
                    "enum": [
                        "business"
                    ]
                },
                "building": {
                    "type": "string"
                }
            },
            "required": [
                "type",
                "building"
            ],
            "additionalProperties": false
        },
        "home_address": {
            "properties": {
                "type": {
                    "enum": [
                        "home"
                    ]
                },
                "street_address": {
                    "type": "string"
                },
                "city": {
                    "type": "string"
                },
                "state": {
                    "type": "string"
                }
            },
            "required": [
                "type",
                "street_address",
                "city",
                "state"
            ],
            "additionalProperties": false
        },
        "partOne": {
            "properties": {
                "one": {
                    "type": "string"
                }
            }
        },
        "partTwo": {
            "properties": {
                "two": {
                    "type": "integer"
                }
            }
        }
    },
    "type": "object",
    "properties": {
        "client_address": {
            "oneOf": [
                {
                    "$ref": "#/definitions/office_address"
                },
                {
                    "$ref": "#/definitions/home_address"
                }
            ]
        },
        "parts": {
            "oneOf": [
                {
                    "$ref": "#/definitions/partOne"
                },
                {
                    "$ref": "#/definitions/partTwo"
                }
            ],
            "additionalProperties": false
        }
    }
}