I've got 3rd option )
All Document options are stored in *_params* (now *optype* and *percolate* are stored in protected properties for some reason and *setTtl()* sets it to *_data* not *_params*)
getOptions method looks like `getOptions(array $params, $withUnderscore)` - *$params* holds names of options to be returned, if option is not set than it is not returned. $withUnderscore tells to prefix names with _
Example:
```php
$document = new Document();
$document->setId(1);
$document->setIndex('index');
$document->setType('type');
$document->setPercolate('*');

$options = $document->getOptions(array('id', 'index', 'type', 'routing'));
// $options = array('id' => 1, 'index' => 'index', 'type' => 'type');
// percolate was not in params list and routing is not set
```
So request can ask document for options he needs without and document know nothing about request