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'?

Even with your restriction $$D$$ is undecidable. You can still reduce the halting problem of a TM $$A$$ on a word $$x$$ to $$D$$. Construct a TM $$B$$ that simulates $$A$$ on $$x$$. If $$A$$ halts, $$B$$ accepts its input. Otherwise $$B$$ runs forever. Clearly then $$A$$ halts on $$x$$ iff $$B \not\in D$$. Note that you can always construct $$B$$ such that $$B \neq M_D$$ by performing additional, irrelevant steps.