Child/Parent relationship by adding an element to list
Here's how I might restructure it (note, I've removed many of the generics since it seems to be tied to Document - if you do need those classes to go for other types, go back to the generics, otherwise, YAGNI):

namespace DocumentToDocument
{
    using System;
    using System.Collections.Generic;

    public sealed class MyEventArgs : EventArgs
    {
        private readonly Document document;

        public MyEventArgs(Document document)
        {
            this.document = document;
        }

        public Document Document
        {
            get
            {
                return this.document;
            }
        }
    }

    public sealed class MyList : List&lt;Document&gt;
    {
        public event EventHandler&lt;MyEventArgs&gt; OnAdd;

        public new void Add(Document item)
        {
            var onAdd = this.OnAdd;

            if (onAdd != null)
            {
                onAdd(this, new MyEventArgs(item));
            }

            base.Add(item);
        }
    }

    public sealed class Document
    {
        private readonly MyList children = new MyList();

        private readonly string name;

        private Document parent;

        public Document(string name, Document parent = null)
        {
            this.name = name;
            this.parent = parent;
            if (this.parent != null)
            {
                this.parent.Children.Add(this);
            }

            this.children.OnAdd += (sender, e) =&gt; e.Document.Parent = this;
        }

        public string Name
        {
            get
            {
                return this.name;
            }
        }

        public Document Parent
        {
            get
            {
                return this.parent;
            }

            set
            {
                this.parent = value;
            }
        }

        public MyList Children
        {
            get
            {
                return this.children;
            }
        }
    }

    internal static class Program
    {
        private static void Main()
        {
            var d = new Document("I am a parent");
            var dd = new Document("I am a child", d);
        }
    }
}