Working inside a particular mathematical structure, I have no trouble giving rigorous definitions, nor deciding whether or not a definition is rigorous. For example, working inside $\mathbb{Z}$:
Definition. Let us say that $x \in \mathbb{Z}$ is prime iff $x$ is non-zero, $x$ does not divide $1$, and for all $y,z \in \mathbb{Z}$, we have that if $x \mid yz$, then $x \mid y$ or $x \mid z$.
So we've specified the meaning of "$x \in \mathbb{Z}$ is prime" without any serious ambiguity. However, in contexts that involve an "external" perspective on mathematical structures, I find it difficult to give truly rigorous definitions, or perhaps I just cannot tell which definitions are rigorous.
For a silly example:
Definition. Let $(G,*)$ and $(H,\diamond)$ denote groups. Then a homomorphism $(G,*) \rightarrow (H,\diamond)$ is a function $f : G \rightarrow H$ such that for all $g,g' \in G$, we have that $f(g*g') = f(g) \diamond f(g')$.
Notice that, according to the above definition, a homomorphism $(G,*) \rightarrow (H,\diamond)$ is a particular kind of function $f : G \rightarrow H$. I guess that, since $f$ is a function, or in other words, a $\mathbf{Set}$-arrow, this means that the domain and codomain of $f$ are sets, namely $\mathrm{dom}(f) = G$ and $\mathrm{cod}(f)=H.$ But (perhaps) I am imagining that the domain and codomain to be groups, so that $\mathrm{dom}(f) = (G,*)$ and $\mathrm{dom}(f) = (H,\diamond).$ So, has my definition truly captured the concept it was intended to? I don't know, but I find it slightly unsatisfying. And sure, there's more to mathematics than rigor and precision, but I like to have my cake and eat it: I like to be precise and intelligible.
Question. Does anyone know of an article purports to help you learn to think and write about mathematical structures in a way that is rigorous and precise?
Well, as far as your actual example is concerned, your proposed definition seems quite sensible to me. You are trying to translate the following definition into natural language (more or less): given groups $(G,*)$ and $(H,\diamond)$,
$$ \mathbf{Grp}((G,*),\ (H,\diamond)):=\{((G,*),\ f,\ (H,\diamond)):\ (G,\ f,\ H)\in \mathbf{Set}(G,\ H)\ \wedge$$$$\wedge\ \forall g,g'\in G\ (f(g*g') = f(g) \diamond f(g'))\} $$
In other words, you are specifically defining the category of groups as a concrete category. Note also that, if $((G,*),\ f,\ (H,\diamond))\in \mathbf{Grp}((G,*),\ (H,\diamond))$, there is no confusion at all about what its domain and codomain are. Indeed, the domain and the codomain of an arrow in $\mathbf{Grp}$ are functions
$$ d_{\mathbf{Grp}},\ c_{\mathbf{Grp}}\colon Arr(\mathbf{Grp})\to Ob(\mathbf{Grp}), $$
and one puts $d_{\mathbf{Grp}}(((G,*),\ f,\ (H,\diamond))):= (G,*)$ and $c_{\mathbf{Grp}}(((G,*),\ f,\ (H,\diamond))):= (H,\diamond)$, whereas, with obvious notations, $d_{\mathbf{Set}}((G,\ f,\ H))= G$ and $c_{\mathbf{Set}}((G,\ f,\ H))= H$. In other words, you are simply considering different couples of functions, when describing the domain and the codomain of $f$ as a morphism of groups or as a morphism of sets.
In addition to this, I would just like to mention that, actually, one can define groups and morphisms of groups in a completely internal way, as the objects and the arrows of the category of group-objects in the category (topos) $\mathbf{Set}$ (see here). Similarly, a whole bunch of algebraic structures (basically all the fundamental ones, like monoids, rings, partial orders, excluding apparently fields though - see here again) can be described as algebraic structures internal to $\mathbf{Set}$.
To conclude, even if I can not give you references to answer your question, I would say that, quoting you and looking at my personal experience, a way "to help you learn to think and write about mathematical structures in a way that is rigorous and precise" is simply that of trying to define those structures as suitable categories and work internally to them.
EDIT: as archipelago pointed out, there was a little bias in my previous definition of $\mathbf{Grp}((G,*),\ (H,\diamond))$ as:
$$ \mathbf{Grp}((G,*),\ (H,\diamond)):=\{f\in \mathbf{Set}(G,\ H):\ \forall g,g'\in G\ (f(g*g') = f(g) \diamond f(g'))\}. $$
I have now fixed it in a way that should somehow work properly and have modified part of my original post accordingly.