The use of "is Return" is a constant topic on this BB. When I first started out with EA I did the same thing - tried to use isReturn messages to show the result of a function call.
But if you consider that the thing you are modelling using isReturn messages is not the result of the function call but an entirely separate call/signal then what EA is doing does make sense.
For example, ObjectA issues a call to ObjectB, expecting say a reference to ObjectC as the return value. To suit your situation, lets have ObjectA issue the ObjectB call from a second level of activation. Now let ObjectB be a factory type of thing that, before it constructs ObjectC, issues a call back to ObjectA to get the specific type of ObjectC to create. This message is a (sort of) callback to ObjectA - not a return value (or it may be implemented as a callback). This to me represents yet another activation level of ObjectA, sepearate entirely from the base level or the selfcall message.
Unfortunately, neither the UML nor EA have a way to clearly show this. EA shows the callback hitting the base activation level.
The activation level is related to the "source" end of the message - not the target. Each target end of a message is in fact a new activation of the targeted object. This makes sense. (Thus, UML shows the "stepped up" lifeline in the case of a self call.) If the called (target) object issues further calls at this level then the source lifeline is extended. OK, this makes sense. So is the lifeline if the oringinal caller - supposedly to indicate that the activation does not terminate until the called object lifeline terminates.
However, (he said) the situation would more be more adequately shown as a "fanout" rather than an extended lifeline on the orginal caller which we intuitively interpret as the original caller doing other things - rather than being in a state of suspended animation until the focus of control is returned from the called object.
In short, firstly the result of a function call is returned along the same diagram line as the call not as a new message. Secondly, UML sequence diagram lifeline boxes do not provide a linear representation of "time" as we intuitively think of it. Finally, think of every target end of a message arrow as representing a new activation.
So, what then is the use of the "isReturn" flag on a message. It indicates that the call is the end of the current activation level on the source. It appears to only be of use if "Suppress Focus of Control" is turned on.
hth
Bruce