In Quantum Field Theory one usually defines the Normal Ordering Symbol by means of examples and a description of its action: the normal ordering $N$ applied to one expression will be the expression itself if it doesn't contain creation/annihilation operators, or it will move all creation operators to the left of the annihilation operators if it contains those.
So for example:
$$N(a_p a_q^\dagger a_k)=a_q^\dagger a_p a_k$$
$$N\left(\int \dfrac{d^3 k d^3q}{(2\pi)^6\sqrt{4\omega_k\omega_q}}a_k a_q^\dagger\right)=\int \dfrac{d^3k d^3q}{(2\pi)^6 \sqrt{4\omega_k\omega_q}}a_q^\dagger a_k$$
and so forth.
The problem is: with the description and examples it is fairly easy to compute normal orderings.
My problem is that I find it difficult to handle it involving general cases for example when trying to prove things like Wick's theorem.
Some problems are: it is too general: it can act on just a product, act on an integral over operators, etc. Second, I can't see a good notation to define the general case.
I mean: I think that handling products of arbitrarily many creation/annihilation operators is enough, because $N$ should commute with the integral and be extended by linearity. But I don't know if just stating this is rigorous enough, or if we would need to derive these properties from a more general definition.
Anyway, even in products, I don't seem to find a good notation to express
$$N(A_1\dots A_n)$$
considering that $A_i$ can be either $a_{p_i}^\dagger$ or $a_{p_i}$.
So how can one define correctly the normal ordering symbol $ N$ and provide a nice notation to handle its general case?