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