def METHOD_NAME(self, def_json, state_name, path):
    """Check State JSON Definition"""
    matches = []
    # https://docs.aws.amazon.com/step-functions/latest/dg/amazon-states-language-common-fields.html
    common_state_keys = [
        "Next",
        "End",
        "Type",
        "Comment",
        "InputPath",
        "OutputPath",
    ]
    common_state_required_keys = [
        "Type",
    ]
    state_key_types = {
        "Pass": ["Result", "ResultPath", "Parameters"],
        "Task": [
            "Credentials",
            "Resource",
            "Parameters",
            "ResultPath",
            "ResultSelector",
            "Retry",
            "Catch",
            "TimeoutSeconds",
            "TimeoutSecondsPath",
            "Parameters",
            "HeartbeatSeconds",
            "HeartbeatSecondsPath",
        ],
        "Map": [
            "MaxConcurrency",
            "Iterator",
            "ItemsPath",
            "ItemProcessor",
            "ItemReader",
            "ItemSelector",
            "ResultPath",
            "ResultSelector",
            "Retry",
            "Catch",
            "Parameters",
        ],
        "Choice": ["Choices", "Default"],
        "Wait": ["Seconds", "Timestamp", "SecondsPath", "TimestampPath"],
        "Succeed": [],
        "Fail": ["Cause", "Error"],
        "Parallel": [
            "Branches",
            "ResultPath",
            "ResultSelector",
            "Parameters",
            "Retry",
            "Catch",
        ],
    }
    state_required_types = {
        "Pass": [],
        "Task": ["Resource"],
        "Choice": ["Choices"],
        "Wait": [],
        "Succeed": [],
        "Fail": [],
        "Parallel": ["Branches"],
    }
    for req_key in common_state_required_keys:
        if req_key not in def_json:
            message = f"State Machine Definition required key ({req_key}) for State ({state_name}) is missing"
            matches.append(RuleMatch(path, message))
            return matches
    state_type = def_json.get("Type")
    if state_type in state_key_types:
        for state_key, _ in def_json.items():
            if state_key not in common_state_keys + state_key_types.get(
                state_type, []
            ):
                message = f"State Machine Definition key ({state_key}) for State ({state_name}) of Type ({state_type}) is not valid"
                matches.append(RuleMatch(path, message))
        for req_key in common_state_required_keys + state_required_types.get(
            state_type, []
        ):
            if req_key not in def_json:
                message = f"State Machine Definition required key ({req_key}) for State ({state_name}) of Type ({state_type}) is missing"
                matches.append(RuleMatch(path, message))
                return matches
    else:
        message = f"State Machine Definition Type ({state_type}) is not valid"
        matches.append(RuleMatch(path, message))
    return matches