I thought that my woes in Decoration marking arrow style ignored in custom node shape? were temporarily solved, but alas: if I do a dimension line (A) -- (B), then all is fine; but if I do (B) -- (A), then one of the arrows gets inverted; the output of the MWE below is:

Now, as I saw in How to draw just the arrow tip in TikZ, just the arrow tip can be reproduced with, say:
\draw[-latex] (0.4,0.4);
This is a line with length 0, starting at (0.4,0.4); interestingly, in the MWE, the result of this command is an arrow pointing up (and the answer at previous link uses node[rotate=90,inner sep=0pt] {\tikz\draw[-triangle 90](0,0) ;}; to rotate the arrow).
My first question is: can the orientation of an arrow be changed for a zero length line, without wrapping it in a context (like \node, or {scope} etc) that would rotate it wholesale?
My second question is - can the dimension line code be somehow fixed, so the correct dimension line arrows are displayed, regardless if the line drawing goes in the (A) -- (B) or the opposite (B) -- (A) direction?
The MWE:
\documentclass[varwidth,tightpage,border=1bp]{standalone}
\usepackage{tikz}
\usetikzlibrary{decorations}
\usetikzlibrary{decorations.markings}
\usetikzlibrary{shapes}
\usetikzlibrary{calc}
\pagecolor{yellow!15} % ignored with preview, but not w/ varwidth
\begin{document}
Hello:
\begin{tikzpicture}
\makeatletter
% https://tex.stackexchange.com/questions/185444/
\gdef\tout{}\gdef\trfm{}
\gdef\typeoutMyInfoString#1{%
\pgfgettransform{\trfm}%
\edef\tout{#1 %
pgfgettransform: \trfm ; %
pgf@pt@aa, pgf@pt@ba, pgf@pt@ab, pgf@pt@bb: \pgf@pt@aa, \pgf@pt@ba, \pgf@pt@ab, \pgf@pt@bb %
}
\typeout{\tout} %
}
\makeatother
% https://tex.stackexchange.com/a/185454/2595
\tikzset{ %
declare function={multip(\a,\b)=\a*\b;}, % otherwise cannot use pgfmathparse here
tconarrC/.style n args={5}{
line width=#3,
draw=#5,
decoration={markings,
mark=at position 0 with {%
\typeoutMyInfoString{pos 0:}%
\pgftransformresetnontranslations %
\pgftransformscale{#4} %
\arrow[sloped,rotate=0,scale=1,fill=#5]{#1}; % (c3)
},
mark=at position 1 with {% 0.999999
\typeoutMyInfoString{pos 1:}%
\pgftransformscale{#4} %
\arrow[sloped,scale=1,fill=#5]{#2};
},
},
shorten >={multip(#4,#3)},
shorten <={multip(#4,#3)},
reset transform/.code={},
postaction={reset transform,decorate},
},
tconarrC/.default={latex}{latex}{3pt}{1.3}{black},
dimen/.style={|-|,
tconarrC={latex}{latex}{\pgflinewidth}{2.0}{gray},
every rectangle node/.style={midway,},
},
minbox/.style={shape=rectangle,inner sep=0pt,outer sep=0pt,minimum size=0pt},
} % end tikzset
\makeatletter
\pgfdeclareshape{myshape}{ %
\inheritsavedanchors[from={rectangle}] %
\inheritbackgroundpath[from={rectangle}] %
\inheritanchorborder[from={rectangle}] %
\foreach \x in {center,north,north east,north west,south,south east,south west,east,west}{ %
\inheritanchor[from={rectangle}]{\x} %
} %
\backgroundpath{ %
\edef\ename{\tikz@fig@name} %
\node[rectangle,minimum size=10pt,draw] (\ename-A) at (\ename.east) {};
\node[rectangle,minimum size=10pt,draw] (\ename-B) at (\ename.west) {};
}
\foregroundpath{ %
\draw[dimen]
(\ename-A.center) -- (\ename-B.center)
node[minbox,above=0pt] (\ename-L) {M$_1$}
;
\draw[dimen]
($(\ename-B.center)-(0,1em)$) -- ($(\ename-A.center)-(0,1em)$)
node[minbox,above=0pt] (\ename-L) {M$_2$}
;
}
} % declareshape
\makeatother
\node[fill] (origin) at (0,0) {};
\draw[-latex] (0.4,0.4);
\node[myshape,minimum size=2cm,anchor=south west] (tshape) at (1,1) {};
\draw[dimen]
($(tshape-A.center)-(0,3em)$) -- ($(tshape-B.center)-(0,3em)$)
node[above=-1pt] {A};
\draw[dimen]
($(tshape-B.center)-(0,4em)$) -- ($(tshape-A.center)-(0,4em)$)
node[above=-1pt] {B};
\end{tikzpicture}
\end{document}

