This is explained nicely in Olsson's book "Algebraic Spaces and Stacks", Prop 13.2.9, where many of the details are worked out. There are other approaches as you point out, but Olsson's argument uses the normalization. Given that the explicit description of the dualizing sheaf is given in terms of the sheaf of differentials on the normalization, this seems to be a natural approach. However, I wouldn't say any of the approaches are easy and the exercise in my notes deserves perhaps a more detailed hint.
Here is an outline of Olsson's argument: Let $C$ be a nodal curve over a field $k$ with $\Sigma \subseteq C$ denoting the nodes, $\pi \colon \tilde{C} \to C$ the normalization, and $\tilde{\Sigma} := \pi^{-1}(\Sigma)$. Choose a preimage $p_i \in \tilde{\Sigma}$ of each node $z_i \in \Sigma$. Define the subsheaf $$K_C = \ker\left(\pi_* \Omega_{\tilde{C}}(\tilde{\Sigma}) \to \bigoplus_{z_i \in \Sigma} k\right),$$ where the map is defined by taking a rational section of $\pi_* \Omega_{\tilde{C}}$ to itsthe vector whose coordinate at $i$ is the sum of the residues of the rational section at the two preimages in $p_i$$\tilde{C}$ of the node $z_i \in \Sigma$.
(1) Since $K_C$ is preserved under etale base change, the explicit description of $K_C$ in the case of a nodal singularity ${\rm Spec} k[x,y]/(xy)$ shows that $K_C$ is a line bundle. Note that the dualizing sheaf $\omega_C$ is also a line bundle (as $C$ is a local complete intersection).
(2) To show that $K_C \cong \omega_C$, it suffices by Yoneda's Lemma to exhibit an isomorphism of the functors $${\rm Hom}(-,K_C), H^1(C,-)^{\vee} \colon {\rm Pic}(C) \to {\rm Vect}_k.$$
(3) For any $L \in {\rm Pic}(C)$, tensoring the exact sequence defining $K_C$ by $L^{\vee}$ and taking cohomology gives identifications $${\rm Hom}_{\mathcal{O}_C}(L, K_C) \cong H^0(C, L^{\vee} \otimes K_C) \cong \ker \left( H^0(\tilde{C}, \pi^* L^{\vee} \otimes \Omega_{\tilde{C}}(\tilde{\Sigma})) \to \bigoplus_{z_i \in \Sigma} k \right).$$
(4) On the other hand, the short exact sequence $0 \to \pi_* \pi^* (L (\tilde{\Sigma})) \to L \to \bigoplus_{z_i \in \Sigma} k \to 0$ induces an identification $$H^1(C, L)^{\vee} = \ker \left( H^1(\tilde{C}, \pi^* L(\tilde{\Sigma}))^{\vee} \to \bigoplus_{z_i \in \Sigma} k \right).$$
(5) One checks that the isomorphism $H^0(\tilde{C}, \pi^* L^{\vee} \otimes \Omega_{\tilde{C}}(\tilde{\Sigma})) \cong H^1(\tilde{C}, \pi^* L(\tilde{\Sigma}))^{\vee}$ given by Serre Duality on $\tilde{C}$ commutes with the two maps to $\bigoplus_{z_i \in \Sigma} k$. This gives an isomorphism ${\rm Hom}_{\mathcal{O}_C}(L, K_C) \cong H^1(C, L)^{\vee}$, which one checks is functorial in $L$.