Note: SUPPLEMENT added at end for twoside version.
Unless you want to spend all your time manually placing text so as to wrap around your clouds, I suggest combining it with a \marginpar mechanism. The only change to the layout I did was to decrease the \textwidth to leave room for the clouds.
\documentclass{article}
\textwidth=\dimexpr\textwidth-1in\relax
\usepackage{tikz,tabto,lipsum}
\usetikzlibrary{shapes}
\newcommand\margincloud[1]{{%
\tabto{\textwidth}%
\llap{%
\rule[-\dp\strutbox]{.5pt}{\dp\strutbox}%
\rule[-\dp\strutbox]{\dimexpr\textwidth-\TabPrevPos\relax}{.5pt}%
\kern-3pt
\smash{\rlap{\rotatebox[origin=lb]{45}{\rule[-\dp\strutbox]{60pt}{.5pt}}}}}%
\tabto*{\TabPrevPos}%
\marginpar{%
\smash{\begin{tikzpicture}
\node [cloud, fill=blue!5, draw,cloud puffs=10,cloud puff arc=120,
aspect=1.5, inner ysep=1em]{\parbox{1in}{\raggedright#1}};
\end{tikzpicture}%
}}%
}}
\begin{document}
This is a test\margincloud{My marginnote of some length} of a cloudy
marginpar. I will continue to write so as to make sure that the line
is appropriately set at the right height. \lipsum[1]
Now I get to try it again, to see if it still works. Let us do it here%
\margincloud{I would like a longer marginnote to see how this works}
and see. \lipsum[2]
Finally, we get to try it one last time on the page. I will work
my way a bit into the paragraph, in order to see if that makes any
difference at all. Ok, we prepare for this final test of the page.
Here goes...\margincloud{Boo!} \lipsum[3]
\end{document}

At the OP's request, a version with dotted connectors:
\documentclass{article}
\textwidth=\dimexpr\textwidth-1in\relax
\usepackage{tikz,tabto,lipsum}
\usetikzlibrary{shapes}
\def\dotfill#1{\cleaders\hbox to #1{\scalebox{1.4}{.}}\hfill}
\newcommand\dotline[2][.5em]{\leavevmode\hbox to #2{\dotfill{#1}\hfil}}
\newcommand\margincloud[1]{{%
\tabto{\textwidth}%
\llap{\raisebox{-\dp\strutbox}{%
\dotline{\dimexpr\textwidth-\TabPrevPos\relax}%
\kern-3pt
\smash{\rlap{\rotatebox[origin=lb]{45}{\dotline[.7em]{60pt}}}}}}%
\tabto*{\TabPrevPos}%
\marginpar{%
\smash{\begin{tikzpicture}
\node [cloud, fill=blue!5, draw,cloud puffs=10,cloud puff arc=120,
aspect=1.5, inner ysep=1em]{\parbox{1in}{\raggedright#1}};
\end{tikzpicture}%
}}%
}}
\sloppy
\begin{document}
This is a test\margincloud{My marginnote of some length} of a cloudy
marginpar. I will continue to write so as to make sure that the line
is appropriately set at the right height. \lipsum[1]
Now I get to try it again, to see if it still works. Let us do it here%
\margincloud{I would like a longer marginnote to see how this works}
and see. \lipsum[2]
Finally, we get to try it one last time on the page. I will work
my way a bit into the paragraph, in order to see if that makes any
difference at all. Ok, we prepare for this final test of the page.
Here goes...\margincloud{Boo!} \lipsum[3]
\end{document}

Better yet, a version with bubbles:
\documentclass{article}
\textwidth=\dimexpr\textwidth-1in\relax
\usepackage{tikz,tabto,lipsum}
\usetikzlibrary{shapes}
\def\dotfill#1#2{\cleaders\hbox to #1{\scalebox{#2}{$\circ$}}\hfill}
\newcommand\dotline[3][.6em]{\leavevmode\hbox to #2{\dotfill{#1}{#3}\hfil}}
\newcommand\margincloud[1]{{%
\tabto{\textwidth}%
\llap{\raisebox{-\dp\strutbox}{%
\dotline{\dimexpr\textwidth-\TabPrevPos\relax}{.6}%
\kern-3pt
\smash{\rlap{\rotatebox[origin=lb]{45}{\dotline[.8em]{60pt}{1}}}}}}%
\tabto*{\TabPrevPos}%
\marginpar{%
\smash{\begin{tikzpicture}
\node [cloud, fill=blue!5, draw,cloud puffs=10,cloud puff arc=120,
aspect=1.5, inner ysep=1em]{\parbox{1in}{\raggedright#1}};
\end{tikzpicture}%
}}%
}}
\sloppy
\begin{document}
This is a test\margincloud{My marginnote of some length} of a cloudy
marginpar. I will continue to write so as to make sure that the line
is appropriately set at the right height. \lipsum[1]
Now I get to try it again, to see if it still works. Let us do it here%
\margincloud{I would like a longer marginnote to see how this works}
and see. \lipsum[2]
Finally, we get to try it one last time on the page. I will work
my way a bit into the paragraph, in order to see if that makes any
difference at all. Ok, we prepare for this final test of the page.
Here goes...\margincloud{Boo!} \lipsum[3]
\end{document}

SUPPLEMENT twoside version (using lines, per OP request)
\documentclass[twoside]{book}
%\usepackage[left=2.5in,right=2.5in]{geometry}
\usepackage{tikz,tabto,lipsum}
\usetikzlibrary{shapes}
\def\dotfill#1#2{\xleaders\hbox to #1{\scalebox{#2}{$\circ$}}\hfill}
\newcommand\dotline[3][.6em]{\leavevmode\hbox to #2{\dotfill{#1}{#3}\hfil}}
\newcommand\margincloud{\ifodd\thepage\relax\expandafter\rmargincloud
\else\expandafter\lmargincloud\fi}
\newcommand\lmargincloud[1]{{%
\tabto*{0pt}%
\smash{\rlap{%
\smash{\llap{\rotatebox[origin=rb]{-45}{\rule[-\dp\strutbox]{60pt}{.5pt}}}}%
\kern-2.5pt
\rule[-\dp\strutbox]{\TabPrevPos}{.5pt}%
\rule[-\dp\strutbox]{.5pt}{\dp\strutbox}}}%
\tabto{\TabPrevPos}%
\marginpar{%
\smash{\makebox[\marginparwidth][r]{\begin{tikzpicture}
\node [cloud, fill=blue!5, draw,cloud puffs=10,cloud puff arc=120,
aspect=1.5, inner ysep=1em]{\parbox{1in}{\raggedright#1}};
\end{tikzpicture}%
}}}%
}}
\newcommand\rmargincloud[1]{{%
\tabto{\textwidth}%
\smash{\llap{%
\rule[-\dp\strutbox]{.5pt}{\dp\strutbox}%
\rule[-\dp\strutbox]{\dimexpr\textwidth-\TabPrevPos\relax}{.5pt}%
\kern-2.5pt
\smash{\rlap{\rotatebox[origin=lb]{45}{\rule[-\dp\strutbox]{60pt}{.5pt}}}}}}%
\tabto*{\TabPrevPos}%
\marginpar{%
\smash{\makebox[\marginparwidth][l]{\begin{tikzpicture}
\node [cloud, fill=blue!5, draw,cloud puffs=10,cloud puff arc=120,
aspect=1.5, inner ysep=1em]{\parbox{1in}{\raggedright#1}};
\end{tikzpicture}%
}}}%
}}
\sloppy
\begin{document}
This is a test\margincloud{My marginnote of some length} of a cloudy
marginpar. I will continue to write so as to make sure that the line
is appropriately set at the right height. \lipsum[1]
Now I get to try it again, to see if it still works. Let us do it here%
\margincloud{I would like a longer marginnote to see how this works}
and see. \lipsum[2]
Finally, we get to try it one last time on the page. I will work
my way a bit into the paragraph, in order to see if that makes any
difference at all. Ok, we prepare for this final test of the page.
Here goes...\margincloud{Boo!} \lipsum[3]
\clearpage
This is a test\margincloud{My marginnote of some length} of a cloudy
marginpar. I will continue to write so as to make sure that the line
is appropriately set at the right height. \lipsum[1]
Now I get to try it again, to see if it still works. Let us do it here%
\margincloud{I would like a longer marginnote to see how this works}
and see. \lipsum[2]
Finally, we get to try it one last time on the page. I will work
my way a bit into the paragraph, in order to see if that makes any
difference at all. Ok, we prepare for this final test of the page.
Here goes...\margincloud{Boo!} \lipsum[3]
\end{document}
