  *     an error is thrown.</p>
  *   </dd>
  *
+ *   <dt><code>optional</code></dt>
+ *   <dd><p>If the search fails, set the target property to <code>null</code>
+ *     instead of throwing an error.</p>
+ *   </dd>
+ *
  *   <dt><code>adapter</code></dt>
  *   <dd><p>Instead of trying to cast the child DisplayObject to the property's
  *     class, use the class as a constructor, with the child DisplayObject

        catch (die:DisplayInjectorError)
        {
            die.property = property.@name;
            throw die;
        }
        catch (te:TypeError)
        {
            throw new DisplayPathError(te.message, displayPath, property.@name);
        }
    }


    private static function getChildByPath(
            display:DisplayObjectContainer, path:String):*
    //        throws DisplayPathError
    {
        var names:Array = path.split(".");
        var resolvedNames:Array = [ ];

    private static function injectProperty(property:XML, metadata:XML,
            source:DisplayObjectContainer, target:*):void
    {
        var args:Object = { name: null, adapter: null, optional: null };

        try {
            collectArgs(metadata, args);
