PETScVec.scale should be done after ghost updating. I.e. I guess something along the lines of:
with L.localForm() as loc_L:
loc_L.set(0)
A.zeroEntries()
assemble_matrix(A, J_form, bcs=bcs)
A.assemble()
assemble_vector(L, res_form)
apply_lifting(L, [J_form], [bcs], x0=[u.x.petsc_vec], alpha=-1.0)
L.ghostUpdate(addv=PETSc.InsertMode.ADD_VALUES, mode=PETSc.ScatterMode.REVERSE)
set_bc(L, bcs, u.x.petsc_vec, alpha=-1.0)
L.ghostUpdate(addv=PETSc.InsertMode.INSERT_VALUES, mode=PETSc.ScatterMode.FORWARD)
L.scale(-1)
should do the trick (also for the computation of stress displacement).