core/src/main/java/hudson/tasks/CommandInterpreter.java defines a join(Proc p) method that's supposed to be able to set the result to Result.UNSTABLE.
However, it has no access to the build object to call setResult(...)
It's an extension point, so while it's not used in-tree it isn't clear if there might be out-of-tree code using it. As such just replacing it with a version that takes more parameters may not be wise.
I think it's necessary to add a member variable to track the build and a protected accessor; that way the same call interface can be retained. Patch pending.