private function hydrateZonesNode(NodeBuilder $node)
    {
        $node
            ->booleanNode('main')
                ->defaultFalse()
            ->end()
            ->booleanNode('virtual')
                ->defaultFalse()
            ->end()
            ->arrayNode('aggregation')
                ->addDefaultsIfNotSet()
                ->beforeNormalization()
                    ->always(function ($v) {
                        if (is_string($v)) {   // shortcut case
                            $v = array('type' => $v);
                        }
                        if (is_array($v) && !empty($v['path'])) {   // path shortcut case
                            $v['type'] = 'template';
                        }

                        return $v;
                    })
                ->end()
                ->children()
                    ->scalarNode('type')
                        ->defaultValue('inline')
                        ->cannotBeEmpty()
                    ->end()
                    ->scalarNode('path')->end()
                ->end()
            ->end()
        ;

        return $node;
    }