Here is a version that does complete zigzag
instead of Jake's complete sines
, which this answer is based on. EDIT: Special zigzag for closed cycles added. 2nd EDIT: special zigzag that arguably works better with at higher curvatures added. The "problem" in the standard zigzags is that the peak of the zigzag is shifted in tangent space. On the other hand, in the "tobias zigzag" decoration it is just above (or below) the origin in tangent space.

MWE
\documentclass[beamer,tikz,preview]{standalone}
\usetikzlibrary{positioning,decorations.pathreplacing,decorations.pathmorphing,shapes.geometric}
% https://tex.stackexchange.com/a/25689/121799
\pgfdeclaredecoration{complete sines}{initial}
{
\state{initial}[
width=+0pt,
next state=sine,
persistent precomputation={\pgfmathsetmacro\matchinglength{
\pgfdecoratedinputsegmentlength / int(\pgfdecoratedinputsegmentlength/\pgfdecorationsegmentlength)}
\setlength{\pgfdecorationsegmentlength}{\matchinglength pt}
}] {}
\state{sine}[width=\pgfdecorationsegmentlength]{
\pgfpathsine{\pgfpoint{0.25\pgfdecorationsegmentlength}{0.5\pgfdecorationsegmentamplitude}}
\pgfpathcosine{\pgfpoint{0.25\pgfdecorationsegmentlength}{-0.5\pgfdecorationsegmentamplitude}}
\pgfpathsine{\pgfpoint{0.25\pgfdecorationsegmentlength}{-0.5\pgfdecorationsegmentamplitude}}
\pgfpathcosine{\pgfpoint{0.25\pgfdecorationsegmentlength}{0.5\pgfdecorationsegmentamplitude}}
}
\state{final}{}
}
\pgfdeclaredecoration{complete zigzag}{initial}{
\state{initial}[
width=+0pt,
next state=half up,
persistent precomputation={\pgfmathsetmacro\matchinglength{
\pgfdecoratedinputsegmentlength / int(\pgfdecoratedinputsegmentlength/\pgfdecorationsegmentlength)}
\setlength{\pgfdecorationsegmentlength}{\matchinglength pt}
}] {}
\state{half up}[
width=+.25\pgfdecorationsegmentlength,
next state=big down]
{\pgfpathlineto{\pgfqpoint{.25\pgfdecorationsegmentlength}{\pgfdecorationsegmentamplitude}}
}
\state{big down}[switch if less than=+.5\pgfdecorationsegmentlength to center finish,
width=+.5\pgfdecorationsegmentlength,
next state=big up]
{
\pgfpathlineto{\pgfqpoint{.5\pgfdecorationsegmentlength}{-\pgfdecorationsegmentamplitude}}
}
\state{big up}[switch if less than=+.5\pgfdecorationsegmentlength to center finish,
width=+.5\pgfdecorationsegmentlength,
next state=big down]
{
\pgfpathlineto{\pgfqpoint{.5\pgfdecorationsegmentlength}{\pgfdecorationsegmentamplitude}}
}
\state{center finish}[width=0pt, next state=final]{
}
\state{final}
{
\pgfpathlineto{\pgfpointdecoratedpathlast}
}
}
\pgfdeclaredecoration{zigzag cycle}{initial}{
\state{initial}[
width=+0pt,
next state=half up,
persistent precomputation={\pgfmathsetmacro\matchinglength{
\pgfdecoratedinputsegmentlength / int(\pgfdecoratedinputsegmentlength/\pgfdecorationsegmentlength)}
\setlength{\pgfdecorationsegmentlength}{\matchinglength pt}
}] {}
\state{half up}[
width=+.25\pgfdecorationsegmentlength,
next state=big down]
{\pgfcoordinate{zigzag-cycle-start}{\pgfqpoint{.25\pgfdecorationsegmentlength}{\pgfdecorationsegmentamplitude}}
\pgfpathmoveto{\pgfqpoint{.25\pgfdecorationsegmentlength}{\pgfdecorationsegmentamplitude}}
}
\state{big down}[switch if less than=+.5\pgfdecorationsegmentlength to center finish,
width=+.5\pgfdecorationsegmentlength,
next state=big up]
{
\pgfpathlineto{\pgfqpoint{.5\pgfdecorationsegmentlength}{-\pgfdecorationsegmentamplitude}}
}
\state{big up}[switch if less than=+.5\pgfdecorationsegmentlength to center finish,
width=+.5\pgfdecorationsegmentlength,
next state=big down]
{
\pgfpathlineto{\pgfqpoint{.5\pgfdecorationsegmentlength}{\pgfdecorationsegmentamplitude}}
}
\state{center finish}[width=0pt, next state=final]{
}
\state{final}
{
\pgfpathlineto{\pgfpointanchor{zigzag-cycle-start}{center}}
}
}
\pgfdeclaredecoration{tobias zigzag cycle}{initial}{
\state{initial}[
width=+0pt,
next state=big down,
persistent precomputation={
\pgfmathsetmacro{\myint}{int(\pgfdecoratedinputsegmentlength/\pgfdecorationsegmentlength)}
\ifodd\myint
\pgfmathsetmacro\matchinglength{
\pgfdecoratedinputsegmentlength / int(1+\pgfdecoratedinputsegmentlength/\pgfdecorationsegmentlength)}
\else
\pgfmathsetmacro\matchinglength{
\pgfdecoratedinputsegmentlength / int(\pgfdecoratedinputsegmentlength/\pgfdecorationsegmentlength)}
\fi
\setlength{\pgfdecorationsegmentlength}{\matchinglength pt}
\pgfmathsetmacro{\myint}{int(\pgfdecoratedinputsegmentlength/\pgfdecorationsegmentlength)}
}] {
\pgfcoordinate{zigzag-cycle-start}{\pgfqpoint{0pt}{-\pgfdecorationsegmentamplitude}}
\pgfpathmoveto{\pgfqpoint{0pt}{-\pgfdecorationsegmentamplitude}}
}
\state{big down}[switch if less than=+.5\pgfdecorationsegmentlength to center finish,
width=+.5\pgfdecorationsegmentlength,
next state=big up]
{
\pgfpathlineto{\pgfqpoint{0pt}{-\pgfdecorationsegmentamplitude}}
}
\state{big up}[switch if less than=+.5\pgfdecorationsegmentlength to center finish,
width=+.5\pgfdecorationsegmentlength,
next state=big down]
{
\pgfpathlineto{\pgfqpoint{0pt}{\pgfdecorationsegmentamplitude}}
}
\state{center finish}[width=0pt, next state=final]{
% this state is unecessary at the moment
}
\state{final}
{
\pgfpathlineto{\pgfpointanchor{zigzag-cycle-start}{center}}
}
}
\begin{document}
\begin{standaloneframe}
\begin{tikzpicture}[main style/.style={
ellipse,draw,fill=blue!30,decorate,
decoration={zigzag,segment length=1.1mm,amplitude=.5mm}
},
complete main style/.style={
ellipse,draw,fill=blue!30,decorate,
decoration={complete zigzag,segment length=1.1mm,amplitude=.5mm}
},
cyclic main style/.style={
ellipse,draw,fill=blue!30,decorate,
decoration={zigzag cycle,segment length=1.1mm,amplitude=.5mm}
},
cyclic tobias style/.style={
ellipse,draw,fill=blue!30,decorate,
decoration={tobias zigzag cycle,segment length=1.1mm,amplitude=.5mm}
}]
\node[main style] at (0,0) {ABC};
\node[main style] at (5,0) {normal zigzag};
\node[complete main style] at (0,-1) {ABC};
\node[complete main style] at (5,-1) {complete zigzag};
\node[cyclic main style] at (0,-2) {ABC};
\node[cyclic main style] at (5,-2) {zigzag cycle};
\node[cyclic tobias style] at (0,-3) {ABC};
\node[cyclic tobias style] at (5,-3) {tobias zigzag};
\end{tikzpicture}
\begin{tikzpicture}[font=\sffamily]
\draw (0,0) arc(135:45:{2*sqrt(2)}) coordinate[midway](X);
\draw[blue] ([xshift=-2cm]X) -- ++(4,0) node[right]{tangent};
\draw[red] (X) -- ++ (0.6,1) node[right]{standard}-- ++ (0.6,-1);
\draw[green!60!black] ([xshift=-0.6cm]X) -- ++ (0.6,1) node[left]{tobias} -- ++ (0.6,-1);
\end{tikzpicture}
\end{standaloneframe}
\end{document}
