# Type of request: This is a ...

[X ] bug report
[ ] feature request

# Detailed description
Calling PutEvents operation returns 500 if no `Detail` is specified. This case is similar to #3043

## Expected behavior
According to the doc https://docs.aws.amazon.com/eventbridge/latest/APIReference/API_PutEventsRequestEntry.html `Details` is optional. 

```
 Detail
    A valid JSON string. There is no other schema imposed. The JSON string may contain fields and nested subobjects.
    Type: String
    Required: No
```

So this should works and set `Detail` as `{}`

```
eb_client = boto3.client('events', endpoint_url='http://localhost:4587')
eb_client.put_events(
    Entries=[
        {
            'DetailType': 'Test'
        }
    ]
)
```

## Actual behavior
500 is returned

# Steps to reproduce

1. Start LocalStack with SERVICES=events
2. Run the client code

## Command used to start LocalStack

```
docker run --rm --name localstack -p 4587:4587 -e SERVICES=events -e DEBUG=true localstack/localstack
```

## Client code (AWS SDK code snippet, or sequence of "awslocal" commands)

CLI:

```
aws events put-events --endpoint-url http://localhost:4587 --entries '[{"DetailType": "Test"}]'
```

Or via python:

```
eb_client = boto3.client('events', endpoint_url='http://localhost:4587')
eb_client.put_events(
    Entries=[
        {
            'DetailType': 'Test',
            'Detail': '{}'
        }
    ]
)
```

for key, value in event_pattern.items():
            event_value = event.get(key.lower())
            if not event_value:
                return False
            if isinstance(value, list) and not identify_content_base_parameter_in_pattern(value):
                if isinstance(event_value, list) and \
                   get_two_lists_intersection(value, event_value) == []:
                    return False
                elif not isinstance(event_value, list) and \
                        isinstance(event_value, (str, int)) and \
                        event_value not in value:
                    return False
            elif isinstance(value, list) and identify_content_base_parameter_in_pattern(value):
                if not filter_event_with_content_base_parameter(value, event_value):
                    return False
            elif isinstance(value, (str, int)):
                try:
                    if isinstance(json.loads(value), dict) and \
                       not filter_event(json.loads(value), event_value):
                        return False
                except json.decoder.JSONDecodeError:
                    return False
        return True
    rule_information = self.events_backend.describe_rule(rule)
    if rule_information.event_pattern:
        event_pattern = json.loads(rule_information.event_pattern)
        if not filter_event(event_pattern, event):
            return False
    return True
def process_events(event, targets):