Here's a method with three questions that is less artificial than boboquack's solution. I'll assume there are four people in a line, (left)ABCD(right).
First, tell everyone "I'm thinking of a question which is either 'is 4 square?' or 'is 4 prime?'." (This is just so that in what follows, everyone knows the correct answer to "the question" doesn't depend on who you ask.)
Ask A "If I ask B and C the question, will I get the same answer?"
- If A says "yes", then either A is yessayer or A is liar and D is truther. (8 possibilities)
- If A says "no", then either A is nosayer or A is truther and D is liar. (8 possibilities)
- If A says nothing then A is truther or liar and D is yessayer or nosayer. (8 possibilities)
Ask B "If I ask D the question, will he lie?"
If B says "yes", possibilities (left-to-right) are YTNL, YLNT, LYNT. We can distinguish between these with one more question, e.g. by asking D if A and C would give the same answer.
If B says "no", possibilities are YNTL, YNLT, LNYT, and these can be distinguished by a similar question.
If B says nothing, the possibilities are YTLN, YLTN which are easy to distinguish.
Ask B "If I ask D the question, will he tell the truth?"
This is now exactly the same as Case 1, with truther and liar swapped.
Ask B "If I ask the person immediately left of the nosayer the question, will he say yes?"
Note that there always is such a person, since the first question established that A is not the nosayer.
If B says "yes", possibilities are LTYN, TYLN, LYTN. These can be distinguished e.g. by asking A if B would say "yes".
If B says "no", possibilities are TLYN, TNLY, LNTY. The same question distinguishes these.
If B doesn't answer, possibilities are TLNY, LTNY, which are easy to cope with.