turing machines – M does not accept [M] | ‘Correction’ of proof possible?

The language $D={(M)|M((M))=0}$ is not decidable because of the following argument:

Suppose there was a $TM space M_D$ that decides $D$. Then if we gave $M_D space (M) $, there would be two possible outcomes:

1. $M_D((M_D))=1 text{ (accepts)}implies M_D text{ does accept }M_D $, contradiction, because then $M_D((M_D))=0$ must be true.

2. $M_D((M_D))=0 text{ (does not accept})implies M_D text{ does accept }M_D $, contradiction, because then $M_D((M_D))=1 $ must be true.

Anyways, I think most people are familiar with the proof.

My question is:

Where does the following argument fail? (I think this is important to understand other proofs where diagonalization is involved)

Suppose we have a $TM$ $M_D$ that decides if another $TM space M$ does not accept $(M)$. What if we just restrict $M_D$ so that it decides D for almost every other Turing Machine? So in this case we could say: $M_D$ does not decide for itself if $M_D$ accepts $(M_D)$, but it decides for every other Turing Machine.

Is this restriction useless because then it is possible to construct infinitely many Turing Machines for which $M_D$ can not decide whether they accept ‘themselves’?