A 'traditional' way with the \@elt splitting feature:
Counter reset lists use the \@elt splitting, i.e. the counters that should be reset by foo counter are stored this way:
foobar\@elt otherfoobar\@elt. The list is named cl@foo and is called each time in stepping command, whereas \@elt is a 'volatile' macro, being defined to do some action.
The same approach can be applied here, using \@elt instead of , as name separator.
The \printauthor command just uses \the\author@toks and defines a special \@elt (in a group) that displays the correct , or and separator finally.
\documentclass{article}
\makeatletter
\newtoks\author@toks\newcounter{author@counter}%
\setcounter{author@counter}{0}%
\newcommand{\authorAdd}[1]{%
\ifnum\theauthor@counter>0\author@toks=\expandafter{\the\author@toks\@elt\relax #1}%
\else\author@toks=\expandafter{\the\author@toks\@author{#1}}%
\fi\stepcounter{author@counter}%
}
\newcounter{dummycounter}
\newcommand{\printauthor}{%
\textsc{Authors:}%
\begingroup
\setcounter{dummycounter}{0}%
\def\@elt##1{%
\ifnum\c@dummycounter < \numexpr\c@author@counter - 2\relax%
,
\else
{ and }%
\fi
\stepcounter{dummycounter}%
}
\the\author@toks%
\endgroup
}
\makeatother
\begin{document}
\authorAdd{Shakespeare}
\authorAdd{Tolkien}
\authorAdd{Groucho Marx}
\authorAdd{Harpo Marx}
\authorAdd{Gummo Marx}
\authorAdd{Zeppo Marx}
\authorAdd{Chico Marx}
\printauthor
\end{document}
A \clist - splitting way with expl3.
\documentclass{article}
\usepackage{xparse}
\makeatletter
\newtoks\author@toks\newcounter{author@counter}%
\setcounter{author@counter}{0}%
\newcommand{\authorAdd}[1]{%
\ifnum\theauthor@counter>0\author@toks=\expandafter{\the\author@toks, #1}%
\else\author@toks=\expandafter{\the\author@toks\@author{#1}}%
\fi\stepcounter{author@counter}%
}
\newcommand{\printauthor}{{\sc Authors:}\the\author@toks}
\ExplSyntaxOn
\newcommand{\splitauthorlist}[1]{%
\clist_set:Nx \l_tmpa_clist {#1}
\clist_use:Nnnn \l_tmpa_clist {,\space} {,\space} {\space and\space}
}
\ExplSyntaxOff
\newcommand{\printauthors}{%
{\scshape Authors}:
\splitauthorlist{\the\author@toks}
}
\makeatother
\begin{document}
\authorAdd{Shakespeare}
\authorAdd{Tolkien}
\authorAdd{Groucho Marx}
\printauthors
\end{document}

\authorAddto specify the last in the list. – musarithmia May 04 '16 at 16:28\sc-- that command is deprecated. Use\scshapeor\textsc– May 04 '16 at 16:32