It turns out that the following line was problematic:
execution.setVariable("abc:client", abc_client);
Alfresco keeps an internal cache of two-way-mapping: qualified name <-> variable name. On first execution of workflow {abc namespace}client is mapped to abc_client. But then the above line gets executed and now {abc namespace}client is mapped to abc:client. As the result, on the next execution of the workflow abc:client
is passed, rather then abc_client
.