def METHOD_NAME(self, val, val_field, ref_val, multiplier):
    # print val, val_field, ref_val
    tmp_type = ref_val.get('type')
    if isinstance(tmp_type, list):
        # item can be one of multiple types
        # print "multiple choice!"
        python_types = set()
        for t in tmp_type:
            if t in self.TYPE_DICT:
                python_types.add(self.TYPE_DICT.get(t))
            else:
                return False, TypeError("Unknown resolving for type {0}".format(t))
        # print "python legit types: ", python_types
        if type(val) not in python_types:
            return False, TypeError("Type of object field '{0}' is not allowed".format(val_field))
        else:
            # WE'RE OK!
            return True, CTRexYAMLLoader._calc_final_value(val, multiplier, ref_val.get('multiply', False))
    else:
        # this is a single type field
        python_type = self.TYPE_DICT.get(tmp_type)
        if not isinstance(val, python_type):
            return False, TypeError("Type of object field '{0}' is not allowed".format(val_field))
        else:
            # WE'RE OK!
            return True, CTRexYAMLLoader._calc_final_value(val, multiplier, ref_val.get('multiply', False))