def METHOD_NAME(self, value):
    try:
        value = super().METHOD_NAME(value)
    except ValidationError as e:
        error_dict = e.params
    else:
        error_dict = {}
    block_types = [block.block_type for block in value]
    missing = set(self.required_block_names) - set(block_types)
    duplicates = [
        name for name in find_duplicates(block_types)
        if name in self.single_block_names
    ]
    all_errors = []
    if missing:
        all_errors.append(
            'You are missing the following required fields: {}'.format(', '.join(prettify_names(missing)))
        )
    if duplicates:
        all_errors.append(
            'The following fields must be included only once: {}'.format(', '.join(prettify_names(duplicates)))
        )
        for i, block_name in enumerate(block_types):
            if block_name in duplicates:
                self.add_error_to_child(error_dict, i, 'info', 'Duplicate field')
    for block in value:
        if hasattr(block.block, 'child_blocks'):
            for child_block_name, child_block in block.block.child_blocks.items():
                if child_block.required and not block.value[child_block_name]:
                    all_errors.append(
                        '{} cannot be empty for {}'.format(child_block.label, block.block.label)
                    )
                if isinstance(child_block, ListBlock) and child_block.child_block.required:
                    for child_value in block.value[child_block_name]:
                        if not child_value:
                            all_errors.append(
                                '{} cannot be empty for {}'.format(child_block.label, block.block.label)
                            )
    if all_errors or error_dict:
        error_dict['__all__'] = all_errors
        raise ValidationError(all_errors, params=error_dict)
    return value