Credo che a meno di uno spazio dopo \mymark il codice possa essere considerato corretto per una analisi a tre vie come quello che proponi:
`
\documentclass[11pt,a4paper]{report}
\makeatletter
\def\setmark#1{%
\def\temp{#1}%
\ifx\temp\space
Spazio imbroglione!%
\else
\ifx\temp\@empty
Vuoto maleducato!%
\else
\def\mymark{#1}\mymark\ Ok%
\fi
\fi
}
\makeatother
\begin{document}
1: \setmark{ Valore non nullo }
2: \setmark{}
3: \setmark{
}
4: \setmark{ }
\end{document}
`
Altrimenti hai la possibilità di usare \newcommand con l’argomento facoltativo
`
\newcommand\setmark[1][]{%
\def\mymark{#1}\ifx\mymark\empty …
\else \ifx\mymark\space …
\else \mymark\ OK
\fi
\fi
}
`
Se lo usi con \setmark senza argomento ti scrive la frase specificate per il caso empty; se ti sbagli e scrivi \setmark[] succede la stessa cosa; se scrivi \setmark[ ] ti scrive la frase per lo spazio; se scrivi \setmark[Pippo] ti scrive Pippo OK.