@bschussek I tried the example out that you mentioned above, it doesn't work out though (see below for full test). The problem with the current setup is that the ```ExecutionRoot``` is set when validating an object: 

```php
public function validate($value, $groups = null, $traverse = false, $deep = false)
{
    $visitor = $this->createVisitor($value);
```

But not a value:

```php
public function validateValue($value, $constraints, $groups = null)
{
    $context = new ExecutionContext($this->createVisitor(null), $this->translator, $this->translationDomain);
```

So the ```GreaterThanValidator``` can't use ```getRoot``` to find the nested array value. I naively tried changing it to:

```php
public function validateValue($value, $constraints, $groups = null)
{
    $context = new ExecutionContext($this->createVisitor($value), $this->translator, $this->translationDomain);
```

Which gives the comparison validator access to the ```$data``` array. There was only one validator test that failed when making this change (it expected an empty root rather than 'Bernhard'):

https://github.com/symfony/symfony/blob/709518ba/src/Symfony/Component/Validator/Tests/ValidatorTest.php#L208

Is there some other way I can access the input ```$value``` for ```validateValue```? Or is the solution to make that change I did in ```validateValue``` permanent?

```php
$metadataFactory = new FakeMetadataFactory();
$validator = new Validator($metadataFactory, new ConstraintValidatorFactory(), new DefaultTranslator());

$data = array(
    'value' => -1,
    'rule' => array(
        'name' => 'Positive',
        'threshold' => 0
    )
);

$errors = $validator->validateValue($data, new Collection(array(
    'value' => array(
        new NotNull(),
        new Type('numeric'),
        new GreaterThan(array('property' => '[rule][threshold]')),
    ),
    'rule' => new Type('array')
)));

die('errors: ' . print_r($errors, true));
```