Here's my take on it [lightly tested]:
(defun C:DOIT (/ peac ss n arc startpt endpt ctr cornerA cornerB)
(setq peac (getvar 'peditaccept))
(setvar 'peditaccept 1)
(if (setq ss (ssget "_:L" '((0 . "ARC"))))
(repeat (setq n (sslength ss)); then
(setq
arc (ssname ss (setq n (1- n)))
startpt (getpropertyvalue arc "startpoint")
endpt (getpropertyvalue arc "endpoint")
ctr (getpropertyvalue arc "center")
cornerA (list (car startpt) (cadr endpt))
cornerB (list (car endpt) (cadr startpt))
); setq
(command "_.pedit" arc "_edit" "_straighten" "_next" "_go")
(if (or (equal (car startpt) (car endpt) 1e-4) (equal (cadr startpt) (cadr endpt) 1e-4))
(command "_eXit" ""); then -- single line segment only
(command ; else -- L
"_insert" "_non"
(if
(and
(> (distance ctr cornerA) (distance ctr cornerB))
(< (getpropertyvalue arc "totalangle") pi)
); and
cornerA cornerB
); if
"_eXit" ""
); command
); if
); repeat
(prompt "\nNo Arc(s) on unlocked Layer(s) selected."); else
); if
(setvar 'peditaccept peac)
(prin1)
); defun
It does it by PEDITing the Arcs into Polylines, and changing them to line segments and adding a vertex if appropriate, so that they retain all their properties [Layer, color, linetype, linetype scale, lineweight] without the routine needing to account for any of that.
If the Arc's endpoints align in either the X or Y direction, it does only the single line segment, otherwise making the L. The direction of the "bulge" of the L is in the direction of the Arc's bulge, so that, for example, the white original at left here will result in the green L's, not the red ones [overlapping segments] or the yellow ones [crossing Polylines].

It could use the addition of *error* handling and Undo begin/end wrapping, but first see whether it does what you want otherwise. It could also easily have the forcing of the endpoints to a nearby Block insertion point [if there is one -- might there ever not be?] included within the PEDIT operation.
Kent Cooper, AIA