This is an incomplete answer or more exactly an answer with some disadvantages. You need to find the length manually of the path between (n) and (s), and if you change the scaling argument, you need to find another length. The main problem is to calculate the length automatically. I think it's possible with the decoration librarybut I don't know enough this library to find a solution. A macro to calculate the length of a path between two nodes would be interesting.
Update of the first code In some simple case, it's possible to calculate the length.
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{decorations}
\makeatletter
\newif\ifpgfextractpointsreseonmoveto
\pgfextractpointsreseonmovetotrue%
\def\calclength#1{{
\pgf@decorate@parsesoftpath#1\parsedpath
\xdef\length{\pgf@decorate@totalpathlength}
\parsedpath
}}
\makeatother
\tikzset{
solid part/.style={%
postaction={solid, decorate, draw,ultra thick,
decoration={
moveto,
pre=curveto,
post=moveto,
pre length=#1,
post length=#1}}
}
}
\begin{document}
\begin{tikzpicture}[scale=2]
\path[save path=\tmppath] (0,0) -- (6,4);
\calclength{\tmppath}
\draw[dotted,solid part=.5*\length] (0,0) -- (6,4);
\end{tikzpicture}
\begin{tikzpicture}[scale=2]
\path[save path=\tmppath] (0,0) to[out=0,in=-90] (6,4);
\calclength{\tmppath}
\draw[dotted,solid part=.5*\length] (0,0) to[out=0,in=-90] (6,4);
\end{tikzpicture}
\end{document}

Update to get the correct arrow with edgeand loop but my code is perhaps not sure in some conditions (I need to test)
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{decorations}
\makeatletter
\newif\ifpgfextractpointsreseonmoveto
\pgfextractpointsreseonmovetotrue%
\def\pgf@extractprocessorsecond#1{%
\ifx#1\pgfsyssoftpath@movetotoken
\ifpgfextractpointsreseonmoveto
\let\pgf@next=\pgf@extractprocessorfirst%
\else%
\let\pgf@next=\pgf@@extractprocessorsecond%
\fi%
\else%
\let\pgf@next=\pgf@@extractprocessorsecond%
\fi%
\pgf@next#1%
}
\tikzset{
adjust arrow/.code={%
\csname if#1\endcsname%
\pgfextractpointsreseonmovetofalse%
\else%
\pgfextractpointsreseonmovetotrue%
\fi},
adjust arrow/.default=true,
}
\makeatother
\begin{document}
\tikzset{
solid part/.style={%
postaction={solid, decorate, draw,adjust arrow,
decoration={
moveto,
pre=curveto,
post=moveto,
pre length=#1,
post length=#1}}
}
}
\begin{tikzpicture}[scale=20,>=latex]
\draw[thick] node (n) [circle,fill] {}
edge [<-,dotted,solid part=28mm,loop above] ();
\end{tikzpicture}
\end{document}

Update N°3) The best solution for the moment. I try to use \usetikzlibrary{decorations.markings}but I need to work with to and not edge. To avoid the arrow with loop, I redefine \tikzstyle{every loop}= [shorten >=1pt]
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{decorations}
\usetikzlibrary{decorations.markings}
\begin{document}
\pgfkeys{
/pgf/decoration/.cd,
pre fraction/.style={pre length=#1*\pgfmetadecoratedpathlength},
post fraction/.style={post length=#1*\pgfmetadecoratedpathlength}
}
\begin{tikzpicture}
\coordinate (A) at (0,0);
\coordinate (B) at (4,2);
\draw [
decoration={
curveto,
pre=moveto, pre fraction=0,
post=moveto, post fraction=0.3}, decorate, red, ultra thick] (A) to[out=0,in=-90](B);
\draw [decoration={curveto,
pre=moveto, pre fraction=0.7,
post=moveto, post fraction=0},%
decorate, blue, ultra thick,dotted] (A) to[out=0,in=-90](B);
\path [
decoration={
markings, mark=at position .7 with {\arrow[red,line width=2pt]{>}}},
decorate ] (A) to[out=0,in=-90](B);
\end{tikzpicture}
\begin{tikzpicture}[scale=20,>=latex]
\tikzstyle{every loop}= [shorten >=1pt]
\node[draw,circle,minimum size=2pt,fill](s){};
\draw[decoration={curveto,
pre=moveto,
pre fraction=0,
post=moveto,
post fraction=0.7},
decorate,red, ultra thick] (s) to[loop above] ();
\draw[decoration={
curveto,
pre=moveto, pre fraction=0.33,post=moveto, post fraction=0},
decorate, blue,dotted, ultra thick] node[]{} to[loop above] ();
\path [decoration={markings,
mark=at position .32 with {\arrow[red,line width=2pt]{>}}},
decorate ] (s) to [loop above] ();
\end{tikzpicture}
\end{document}

Update final With edge we need to add decorate in the option of `edge``
% remove the arrow from the style of every loop
\tikzset{every loop/.style={looseness=10}}
\begin{tikzpicture}[scale=5]
% draw the loop
\draw node (n) [circle,draw] {A} edge [dashed,loop above] ();
% first decoration : solid line
\path [ decoration={ curveto,
pre=moveto,
pre fraction=0,
post=moveto,
post fraction=0.9},red,thick]%
(n) edge[decorate,loop above]();
% second decoration the arrow
\path[>=latex,decoration={ markings,
mark=at position .12 with {\arrow[red,thick]{>}}}]%
(n) edge[decorate,loop above] ();
\end{tikzpicture}

edge. I use this code only with--andtobut you neededgeto creta a loop. The code is complicated to avoid the weird double arrow tip at the end of the dotted path and I don't know how to get an arrow at the end of the solid line :( – Alain Matthes Dec 01 '11 at 22:08\pgfdeclaredecoration{remove}{final}{\state{final}[width=\pgfdecoratedpathlength]{}}, then updatesolid partto haveremoveaspostand usearrows=->as style. It seems to do what I want: actually construct a path which is PART of the original path. Would you care updating your solution with that option? – Michaël Dec 02 '11 at 18:33then update solid part to have remove as post and use arrows=-> as style.. You can also post your answer ! – Alain Matthes Dec 02 '11 at 20:11